【发布时间】:2011-08-15 13:07:01
【问题描述】:
我有一个带有删除模板字段的 GridView:
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:GridView ID="gvCurrentDay" CssClass="gridview" OnRowCommand="gvCurrentDay_RowCommand" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField DataField="ClientName" HeaderText="Client" />
<asp:BoundField DataField="ProjectTitle" HeaderText="Project" />
<asp:BoundField DataField="TimeToAdd" HeaderText="Time Allocated" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" />
<asp:TemplateField ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="imbDeleteRow" ImageUrl="~/images/icons/DeleteRed.png" CommandArgument='<%# Eval("RecordID") %>' CommandName="Delete" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
当按下按钮并从数据库中删除数据库条目时代码运行,但 GridView 没有重新绑定,这里是控制删除的代码:
protected void gvCurrentDay_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
int RecordID = Convert.ToInt32(e.CommandArgument);
tdl objTdl = new tdl();
objTdl.DeleteEntryForDay(RecordID);
GetItineryForDay(Convert.ToDateTime(txtCalendar.Text));
lblMessages.Text = "Entry removed";
}
}
这是 GetItineryForDay 过程的第一部分:
protected void GetItineryForDay(DateTime SelectedDate)
{
gvCurrentDay.DataSource = null;
gvCurrentDay.DataBind();
tdl objTdl = new tdl();
DataTable dt = objTdl.GetUsersProjectTimeForDay(SelectedDate, Convert.ToInt32(Request.Cookies["staffid"].Value));
if (dt.Rows.Count > 0)
{
DataRow row = dt.Rows[0];
int TotalTime2 = Convert.ToInt32(row[7]);
string TotalTime = row[7].ToString() + " minutes";
gvCurrentDay.DataSource = dt;
gvCurrentDay.DataBind();
您能从代码中看出 GridView 没有更新的任何原因吗? GridView 位于 UpdatePanel 中。
【问题讨论】:
-
只有当
dt.Rows.Count大于 0 时才绑定drid。可能在这种情况下没有返回行,因此网格没有绑定 -
您确定将值输入到 DataTable dt 中吗? (我的意思是计数大于 0)
-
是的,有 6 行,具体取决于您尝试示例的次数。
-
您应该包含更多的 ASPX 代码。您注意到 GV 在 UpdatePanel 中 - 可能是该面板的定义/配置方式导致了问题。
-
在额外代码中添加。
标签: asp.net gridview updatepanel