#c# #asp.net #telerik
#c# #asp.net #telerik
Вопрос:
Я использую RadGrid с несколькими столбцами, которые можно редактировать (пакетно, как 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 в 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. Но я хочу получить недавно измененный источник данных.
protected void SendEmail_Click(object sender, EventArgs e)
{
RadGrid1.Rebind();
// RadGrid1.Datasource is null
}
Как я могу решить эту проблему?
Большое спасибо.
Ответ №1:
DataSource
in GridView
не сохраняется каким-либо постоянным способом при обратной передаче, поэтому вам нужно где-то сохранить его или запросить его снова из вашей базы данных. Из-за этого ваш источник данных равен null.
Это предлагаемый код на их форуме о том, как использовать исходный код вашей сетки.
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;
Комментарии:
1. Спасибо за ваш ответ. Но в этом случае проблема в том, что строки RadGrid содержат старые значения, а не недавно отредактированные значения.
2. @MirzodalerAtaev Вы можете сохранить «новые» значения в базе данных нажатием кнопки и извлечь из базы данных (или из того, к чему вы привязываете свою сетку). .Свойство Text элемента управления возвращает текущее значение элемента управления.