GridView DataBind的问题

jiangseraph 2012-07-04 10:11:23
初学者请高手指点问题这个如何分析

在图1任一行点选红色的“X”执行删除一行的操作后,第一次会出现图2的样子, 右面出现一块空白的区域,之后再删除任意记录又回到正常的状态(图3). 请高手帮助分析问题如何解决. 谢谢
图1

图2

图3

删除操作的代码

protected void btnRemove_Command(object sender, CommandEventArgs e)
{
pnlMessages.Visible = false;
if (e.CommandArgument.ToString() !="")
{
DataTable SiteDB = CreateSiteDataTable();

foreach (GridViewRow row in gvSiteList.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
if (row.Cells[0].Text.ToString() != e.CommandArgument.ToString())
{
DataRow dataRow = SiteDB.NewRow();
dataRow["ID"] = row.Cells[0].Text;
dataRow["Name"] = row.Cells[1].Text;
dataRow["State"] = row.Cells[2].Text;
dataRow["Region"] = row.Cells[3].Text;
dataRow["Group"] = row.Cells[4].Text;
SiteDB.Rows.Add(dataRow);
}
}
}
gvSiteList.DataSource = SiteDB;
gvSiteList.DataBind();
}
}
...全文
321 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
波仔 2012-07-05
  • 打赏
  • 举报
回复
那你没必要这么做吧,点红色X直接删除当前行数据不就行了!
不用重新绑定数据,应该不会出现这问题
jiangseraph 2012-07-05
  • 打赏
  • 举报
回复
抱歉,问题描述的不清晰,一直在研究这个问题,所以忘记回答a793917709的疑问.
实际上这个ImageButton的操作是移除GridView中的记录,用户选取需要的数据进行下一步操作,并没有涉及到数据库的删除.
昨天的测试我发现如果把ImageButton移除,当移除一条记录后,GridView可以正常的显示.所以我怀疑这是一个刷新显示的问题, 还请大家帮助能给我些建议, 以下是网页中GridView的代码

<asp:GridView ID="gvSiteList" runat="server" AutoGenerateColumns="false"
AllowPaging="false" Height="390px" Width="100%"
CssClass="gridViews" HeaderStyle-CssClass ="gridViewContent">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" Visible="true" ReadOnly="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="Name" HeaderText="Name" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="State" HeaderText="State" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="Region" HeaderText="Region" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="Group" HeaderText="Group" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>

<asp:TemplateField ItemStyle-HorizontalAlign="Right" >
<ItemTemplate>
<%--<asp:CheckBox ID="chkStatus" runat="server" Checked="true" />--%>

<asp:ImageButton ImageUrl="~/Images/delete.png" ID="btnRemoveItem" runat="server" CausesValidation="false" Text="remove" CommandArgument='<%# Eval("ID") %>' oncommand="btnRemove_Command" />
</ItemTemplate>
</asp:TemplateField>


</Columns>
</asp:GridView>
jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
这样加行吗? 测试一下效果好象没有变化

gvSiteList.DataSource = SiteDB;
gvSiteList.DataBind();
for (int i = 0; i < gvSiteList.Columns.Count; i++)
{
gvSiteList.Columns[i].ItemStyle.Width = 30;
}

zhangCbrother 2012-07-04
  • 打赏
  • 举报
回复
给个固定值看看。
lengmianq123 2012-07-04
  • 打赏
  • 举报
回复
给个固定 宽度试试
a793917709 2012-07-04
  • 打赏
  • 举报
回复
这。。。。 真是 活见鬼了。。。 借用10楼的给个固定 宽度试试
jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
谢谢大家请帮忙看看吧

<div class="AspNet-GridView" id="ctl00_ContentPlaceHolder1_gvSiteList">
<table cellpadding="0" cellspacing="0" summary="" class="gridViews">
<thead>
<tr class="gridViewContent">
<th class="gridViewContent" scope="col">ID</th>
<th class="gridViewContent" scope="col">Name</th>
<th class="gridViewContent" scope="col">State</th>
<th class="gridViewContent" scope="col">Region</th>
<th class="gridViewContent" scope="col">Group</th>
<th scope="col"> </th>
</tr>
</thead>
<tbody>
<tr>
<td class="gridViewContent">1500</td>
<td class="gridViewContent">LAUNCESTON</td>
<td class="gridViewContent">TAS</td>
<td class="gridViewContent">REGION 3</td>
<td class="gridViewContent">REGIONAL</td>
<td>


<input type="image" name="ctl00$ContentPlaceHolder1$gvSiteList$ctl02$btnRemoveItem" id="ctl00_ContentPlaceHolder1_gvSiteList_ctl02_btnRemoveItem" Text="remove" src="../Images/delete.png" style="border-width:0px;" />
</td>
</tr>
<tr class="AspNet-GridView-Alternate">
<td class="gridViewContent">1501</td>
<td class="gridViewContent">NEWSTEAD</td>
<td class="gridViewContent">TAS</td>
<td class="gridViewContent">REGION 3</td>
<td class="gridViewContent">REGIONAL</td>
<td>


<input type="image" name="ctl00$ContentPlaceHolder1$gvSiteList$ctl03$btnRemoveItem" id="ctl00_ContentPlaceHolder1_gvSiteList_ctl03_btnRemoveItem" Text="remove" src="../Images/delete.png" style="border-width:0px;" />
</td>
</tr>

jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
谢谢a793917709 请帮忙看看

<div class="AspNet-GridView" id="ctl00_ContentPlaceHolder1_gvSiteList">
<table cellpadding="0" cellspacing="0" summary="" class="gridViews">
<thead>
<tr class="gridViewContent">
<th class="gridViewContent" scope="col">ID</th>
<th class="gridViewContent" scope="col">Name</th>
<th class="gridViewContent" scope="col">State</th>
<th class="gridViewContent" scope="col">Region</th>
<th class="gridViewContent" scope="col">Group</th>
<th scope="col"> </th>
</tr>
</thead>
<tbody>
<tr>
<td class="gridViewContent">1500</td>
<td class="gridViewContent">LAUNCESTON</td>
<td class="gridViewContent">TAS</td>
<td class="gridViewContent">REGION 3</td>
<td class="gridViewContent">REGIONAL</td>
<td>


<input type="image" name="ctl00$ContentPlaceHolder1$gvSiteList$ctl02$btnRemoveItem" id="ctl00_ContentPlaceHolder1_gvSiteList_ctl02_btnRemoveItem" Text="remove" src="../Images/delete.png" style="border-width:0px;" />
</td>
</tr>
<tr class="AspNet-GridView-Alternate">
<td class="gridViewContent">1501</td>
<td class="gridViewContent">NEWSTEAD</td>
<td class="gridViewContent">TAS</td>
<td class="gridViewContent">REGION 3</td>
<td class="gridViewContent">REGIONAL</td>
<td>


<input type="image" name="ctl00$ContentPlaceHolder1$gvSiteList$ctl03$btnRemoveItem" id="ctl00_ContentPlaceHolder1_gvSiteList_ctl03_btnRemoveItem" Text="remove" src="../Images/delete.png" style="border-width:0px;" />
</td>
</tr>

G9rubby 2012-07-04
  • 打赏
  • 举报
回复
试下固定WIDTH宽度。如果还会,审查下元素看下具体的HTML。
a793917709 2012-07-04
  • 打赏
  • 举报
回复
这样貌似 是没错 你 运行 把第2张图 情况下的 右键查看 IE 的源文件,看看 哪里到底多了什么东西
jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
网页中gridview的代码

<asp:GridView ID="gvSiteList" runat="server" AutoGenerateColumns="false"
AllowPaging="false" Height="390px" Width="100%"
CssClass="gridViews" HeaderStyle-CssClass ="gridViewContent">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" Visible="true" ReadOnly="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="Name" HeaderText="Name" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="State" HeaderText="State" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="Region" HeaderText="Region" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:BoundField DataField="Group" HeaderText="Group" Visible="true"
HeaderStyle-CssClass="gridViewContent"
ItemStyle-CssClass="gridViewContent" >
<HeaderStyle CssClass="gridViewContent" />
<ItemStyle CssClass="gridViewContent" />
</asp:BoundField>
<asp:TemplateField ItemStyle-HorizontalAlign="Right" >
<ItemTemplate>
<%--<asp:CheckBox ID="chkStatus" runat="server" Checked="true" />--%>
<asp:ImageButton ImageUrl="~/Images/delete.png" ID="btnRemoveItem" runat="server" CausesValidation="false" Text="remove" CommandArgument='<%# Eval("ID") %>' oncommand="btnRemove_Command" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
我怀疑是这里 有木有可能多出一列什么的
--是, 下面是DataTable 的代码 和网页中gridview的代码
我的意思说: 每一次删除所看到的结果是正确的, 只有第一次删除时,右面总是出现一块空白区域,之后又会正常.让人搞不懂.
private static DataTable CreateSiteDataTable()
{

DataTable dtSite = new DataTable("tblSiteList");
dtSite.Columns.Add("RowID", typeof(Int32));
dtSite.Columns.Add("ID", typeof(Int32));
dtSite.Columns.Add("Name", typeof(String));
dtSite.Columns.Add("State", typeof(String));
dtSite.Columns.Add("Region", typeof(String));
dtSite.Columns.Add("Group", typeof(String));
dtSite.Columns.Add("Selected", typeof(int));
dtSite.Columns.Add("Status", typeof(String));

return dtSite;

}
a793917709 2012-07-04
  • 打赏
  • 举报
回复
..楼主 显示正确 怎么还有 第2张图的那种效果,你的这个删除啊 看的很蛋疼
DataRow dataRow = SiteDB.NewRow();
dataRow["ID"] = row.Cells[0].Text;
dataRow["Name"] = row.Cells[1].Text;
dataRow["State"] = row.Cells[2].Text;
dataRow["Region"] = row.Cells[3].Text;
dataRow["Group"] = row.Cells[4].Text;
SiteDB.Rows.Add(dataRow);
我怀疑是这里 有木有可能多出一列什么的 不然 不会出现 第2张图的情况

jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
数据可以被正确的删除,显示是正确的, 我想问题可能还是在显示上
jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
Re: a793917709

删除行 数据
jiangseraph 2012-07-04
  • 打赏
  • 举报
回复
先谢谢rejoice123 的回复.
可是我没有删除成功的消息, 直接Gridview显示新的DataTable
a793917709 2012-07-04
  • 打赏
  • 举报
回复
楼主 你 要删除列啊 还是 删除行 数据
Jack123 2012-07-04
  • 打赏
  • 举报
回复
你点击删除后。。。弹框信息是用的

Response.Write("<script>alert('删除成功')</script>");????

换成

Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('删除成功')</script>");
饕餮123 2012-07-04
  • 打赏
  • 举报
回复
没有数据库删除操作呢!!!
饕餮123 2012-07-04
  • 打赏
  • 举报
回复
他这个删除数据了吗?我咋没看到啊?
加载更多回复(2)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧