我使用的是可以编辑的多列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>
在OnNeedDataSource事件我设置ObjectDataSource Id为RadGrid.DataSourceId。
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSourceID = "TestSource";
}
在当前页面我也有按钮"发送电子邮件"发送rad网格插入值。
<asp:Button ID="SendEmail" OnClick="SendEmail_Click" Text="Send" runat="server" />
问题是,在SendEmail_Click数据源是空的。但是我想获得新更改的数据源。
protected void SendEmail_Click(object sender, EventArgs e)
{
RadGrid1.Rebind();
// RadGrid1.Datasource is null
}
我该如何解决这个问题?多谢。
GridView
中的DataSource
不以任何持久的方式存储在Postback中,因此您必须将其保存在某个地方,或者您必须再次从数据库请求它。因为你的数据源是空的。
这是建议的代码在他们的论坛如何采取你的网格的来源。
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;