ASP NET。 Rad Grid。在回发时丢失更改的值

时间:2016-10-21 09:57:38

标签: c# asp.net telerik

我正在使用一个可以编辑多个列的RadGrid(BatchEdit就像excel一样)。

<telerik:RadGrid RenderMode="Lightweight" ID="RadGrid1" runat="server" AutoGenerateColumns="False"GridLines="Both"OnNeedDataSource="RadGrid1_NeedDataSource" AllowAutomaticInserts="True" AllowAutomaticUpdates="True"AllowAutomaticDeletes="True">
            <ItemStyle Wrap="false" />
            <MasterTableView TableLayout="Fixed" NoMasterRecordsText="" ShowFooter="true" EditMode="Batch">
                ...
            </MasterTableView> </telerik:RadGrid>

RadGrid的数据源是ObjectDataSource

<asp:ObjectDataSource ID="TestSource" runat="server" TypeName="TestClass" SelectMethod="GetAllItems">
      <UpdateParameters>
                <asp:Parameter Name="Name" Type="String" />
                <asp:Parameter Name="LastName" Type="String" />
                <asp:Parameter Name="BirthData" Type="DateTime" />
      </UpdateParameters> </asp:ObjectDataSource>

On OnNeedDataSource事件我将ObjectDataSource的Id设置为RadGrid.DataSourceId。

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
        RadGrid1.DataSourceID = "TestSource";
}

在当前页面中,我还有按钮“发送电子邮件”发送rad gird插入值。

<asp:Button ID="SendEmail" OnClick="SendEmail_Click" Text="Send" runat="server" />

问题是SendEmail_Click DataSource为null。但我希望得到新更改的DataSource。

protected void SendEmail_Click(object sender, EventArgs e)
{
        RadGrid1.Rebind();
        // RadGrid1.Datasource is null
}

我该如何解决这个问题? 非常感谢。

1 个答案:

答案 0 :(得分:1)

DataSource中的

GridView不会以任何持久的方式存储在Postback中,因此您必须将其保存在某处或者您必须再次从数据库中请求它。因为你的数据源是空的。

这是 Forum 中建议的代码,用于了解如何获取网格的来源。

    DataTable dtRecords = new DataTable();
    foreach (GridColumn col in grdShippedOrders.Columns)
    {
        DataColumn colString = new DataColumn(col.UniqueName);
        dtRecords.Columns.Add(colString);

    }
    foreach (GridDataItem row in grdShippedOrders.Items) // loops through each rows in RadGrid
    {
        DataRow dr = dtRecords.NewRow();
        foreach (GridColumn col in grdShippedOrders.Columns) //loops through each column in RadGrid
               dr[col.UniqueName] = row[col.UniqueName].Text;
        dtRecords.Rows.Add(dr);
    }
    return dtRecords;