【问题标题】:GridView Delete Not Re-BindingGridView 删除不重新绑定
【发布时间】: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


【解决方案1】:

不要使用"Delete" 作为CommandName,而是使用其他名称,例如"ManualDelete""Delete" 通常被 RowDeletingRowDeleted 事件捕获。

另外,由于“数据库条目已从数据库中删除”,您可以将重新绑定代码放在 RowDeleted 事件中。

protected void gvCurrentDay_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
    GetItineryForDay(Convert.ToDateTime(txtCalendar.Text));
    lblMessages.Text = "Entry removed";
}

【讨论】:

  • 谢谢伙计,将“删除”更改为 CommandName 似乎可以解决问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2014-07-13
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多