【问题标题】:ASP NET. Rad Grid. Lose changed values on postbackASP 网络。辐射网格。在回发时丢失更改的值
【发布时间】:2017-03-03 14:05:16
【问题描述】:

我使用的 RadGrid 具有可编辑的多列(像 excel 一样的 BatchEdit)。

<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 gird 插入值。

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

问题是 SendEmail_Click 上的 DataSource 为空。但我想获得新更改的数据源。

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

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

【问题讨论】:

    标签: c# asp.net telerik


    【解决方案1】:

    GridView 中的DataSource 不会在 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; 
    

    【讨论】:

    • 感谢您的回答。但在这种情况下,问题是 RadGrid 行具有旧值而不是新编辑的值。
    • @MirzodalerAtaev 您可以在按钮单击时将“新”值保存在 db 中并从数据库(或从您绑定网格的任何内容)中检索。 .Text 控件的属性返回控件的当前值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多