具有GridView,但无法在回发后检索任何数据。我在Page_InitPage_Load的开头设置了一个断点,在任何触发的回发中,GridView.Rows.Count属性始终为0。GridView的定义如下所示:

        <asp:GridView ID="TestGrid" runat="server" AllowSorting="False" DataKeyNames="ID,stock,percentage"
            OnRowDataBound="GridViewTest_RowDataBound" EnableViewState="True"
            OnRowUpdating="GridViewTest_OnRowUpdating" OnRowEditing="GridViewTest_OnRowEditing" OnRowCancelingEdit="GridViewTest_OnRowCancelingEdit"
            AutoGenerateColumns="False">
            <Columns>
                <asp:CommandField ShowEditButton="True" CausesValidation="False"/>
                <asp:BoundField DataField="Client" HeaderText="Client" InsertVisible="False" ReadOnly="True" />
                <asp:BoundField DataField="Stock" HeaderText="Stock" InsertVisible="False" ReadOnly="True" />
                <asp:BoundField DataField="DutyStatus" HeaderText="DutyStatus" InsertVisible="False" ReadOnly="True" />
                <asp:TemplateField HeaderText="Percentage" InsertVisible="False">
                    <ItemTemplate>
                        <asp:Label ID="enhLbl" runat="server"><%#Eval("Percentage")%></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="TbPercentage" runat="server" Text="<%#Bind("Percentage")%>" class="edit-field"></asp:TextBox>
                    </EditItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>


我在IsPostBack中检查了Page_Load,并且仅将GridView绑定到其DataSource(如果不是回发)。
它重新绑定的唯一其他时间是在GridViewTest_OnRowEditingGridViewTest_OnRowUpdatingGridViewTest_OnRowCancelingEdit事件处理程序中。

我通过以下方式将GridView绑定到DataTable

    AGridView.DataSource = DataTableSplitParcels;
    AGridView.DataBind();
    AGridView.EnableViewState = true;


我不知道它是否有任何区别,但是DataTable是用代码创建的,并且在循环中添加了行。

在回发的Page_Load中,我可以看到GridViewDataKeysArrayList属性已填充有当前值,但是由于没有行,因此无法检索任何更新的值。

最佳答案

问题出现在Page_Load事件中,该事件在每次调用时都刷新您的GridView(与回发无关),因此,您丢失了用户在更新过程中输入的内容。

因此,在您的Page_LoadBindData事件上放置一个调试器,看看它是否完全被Page_Load调用,并且您需要停止该调试器。我尝试过的代码。

ASPX

<asp:GridView ID="TaskGridView" runat="server"
        AutoGenerateEditButton="True"
        AllowPaging="true"
        OnRowEditing="TaskGridView_RowEditing"
        OnRowCancelingEdit="TaskGridView_RowCancelingEdit"
        OnRowUpdating="TaskGridView_RowUpdating"
        OnPageIndexChanging="TaskGridView_PageIndexChanging">
      </asp:GridView>


CS

protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        // Create a new table.
        DataTable taskTable = new DataTable("TaskList");

        // Create the columns.
        taskTable.Columns.Add("Id", typeof(int));
        taskTable.Columns.Add("Description", typeof(string));
        taskTable.Columns.Add("IsComplete", typeof(bool));

        //Add data to the new table.
        for (int i = 0; i < 20; i++)
        {
            DataRow tableRow = taskTable.NewRow();
            tableRow["Id"] = i;
            tableRow["Description"] = "Task " + i.ToString();
            tableRow["IsComplete"] = false;
            taskTable.Rows.Add(tableRow);
        }

        //Persist the table in the Session object.
        Session["TaskTable"] = taskTable;

        //Bind data to the GridView control.
        BindData();
    }
}

protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    //Retrieve the table from the session object.
    DataTable dt = (DataTable)Session["TaskTable"];

    //Update the values.
    GridViewRow row = TaskGridView.Rows[e.RowIndex];
    dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
    dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
    dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;

    //Reset the edit index.
    TaskGridView.EditIndex = -1;

    //Bind data to the GridView control.
    BindData();
}

private void BindData()
{
    TaskGridView.DataSource = Session["TaskTable"];
    TaskGridView.DataBind();
}


Source available here

关于c# - 无法将数据持久保存在GridView中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32606871/

10-12 12:37
查看更多