2016-10-21 29 views
7

Tôi đang sử dụng RadGrid với nhiều cột có thể được chỉnh sửa (BatchEdit như excel).ASP NET. Rad Lưới. Mất các giá trị đã thay đổi trên postback

<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> 

Datasource của RadGrid là 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 sự kiện Tôi đang thiết Id của ObjectDataSource để RadGrid.DataSourceId.

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

Trong trang hiện tại Tôi cũng có nút "Gửi email" gửi giá trị chèn vào ổ cắm rad.

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

Vấn đề là trên SendEmail_Click DataSource là rỗng. Nhưng tôi muốn có DataSource mới được thay đổi.

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

Làm cách nào để giải quyết vấn đề này? Rất cám ơn.

Trả lời

1

DataSource trong GridView không được lưu trữ theo bất kỳ cách nào liên tục trên Postback để bạn phải lưu nó ở đâu đó hoặc bạn phải yêu cầu lại từ cơ sở dữ liệu của bạn. Do đó nguồn dữ liệu của bạn là null.

Đây là mã được đề xuất trong Forum để biết cách lấy nguồn lưới của bạn.

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; 
+0

Cảm ơn câu trả lời của bạn. Nhưng trong trường hợp này, các hàng RadGrid có giá trị cũ và không phải giá trị mới được chỉnh sửa. –

+0

@MirzodalerAtaev Bạn có thể lưu các giá trị "mới" trong db khi nhấp vào nút và truy xuất từ ​​cơ sở dữ liệu (hoặc từ bất kỳ thứ gì bạn đang ràng buộc lưới của mình). .Text thuộc tính của điều khiển trả về giá trị hiện tại của điều khiển. – mybirthname

Các vấn đề liên quan