СЕТЬ ASP. Rad сетка. Потерять измененные значения при обратной передаче

#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 элемента управления возвращает текущее значение элемента управления.