【问题标题】:GridView changes not showing in binded datatableGridView 更改未显示在绑定的数据表中
【发布时间】:2013-06-28 12:39:03
【问题描述】:

我有一个 GridView 设置,我尝试绑定到 DataTable .. 然后我通过网页对 GridView 的值进行了一些更改.. 然后我进入按钮单击的代码后面,看到 DataTable 仍然里面有旧值...

GridView 的 ASPX 标记代码:

<asp:gridview ID="ESBAndTSRValuesInputGridView" runat="server" ShowFooter="true" AutoGenerateColumns="false">
        <Columns>
        <asp:BoundField DataField="Award ID" HeaderText="Award ID" Visible="false" />
        <asp:BoundField DataField="Award Name" HeaderText="Award Name" />
        <asp:TemplateField HeaderText="ESB Value">
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="TSR Value">
            <ItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
</asp:gridview>

从按钮单击的代码隐藏中初始化 GridView 数据:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Award ID", typeof(string)));
dt.Columns.Add(new DataColumn("Award Name", typeof(string)));
dt.Columns.Add(new DataColumn("ESB Value", typeof(string)));
dt.Columns.Add(new DataColumn("TSR Value", typeof(string)));
DataRow[] PSPAwards =  dtAwards.Select("AWARDTYPE = 'PSP'");
foreach (DataRow dr in PSPAwards)
{
    dt.Rows.Add(dr["AWARDID"].ToString(), dr["AWARDNAME"].ToString(), "0", "100");
}
ViewState["ESBAndTSRValuesDataTable"] = dt;
ESBAndTSRValuesInputGridView.DataSource = dt;
ESBAndTSRValuesInputGridView.DataBind();

在上面的代码中,您可以看到我使用默认值 0 和 100 初始化了行。这是我在从网页更改这些值后在调试事件期间看到的内容..

如何使 GridView 自动将对其所做的所有更改保存到其链接的 DataTable 中?

我正在使用 .NET 2.0 Framework 和 VS2005 ..

【问题讨论】:

  • 有人可以帮我吗?

标签: asp.net .net gridview .net-2.0 asp.net-2.0


【解决方案1】:

试试这个

你的网格视图

 <asp:gridview ID="ESBAndTSRValuesInputGridView" runat="server" ShowFooter="true" AutoGenerateColumns="false">
        <Columns>
        <asp:BoundField DataField="AwardID" HeaderText="Award ID" Visible="false" />
        <asp:BoundField DataField="AwardName" HeaderText="Award Name" />
        <asp:TemplateField HeaderText="ESBValue">
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" Text='<%# Eval("ESBValue") %>' runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="TSR Value">
            <ItemTemplate>
                <asp:TextBox ID="TextBox2" Text='<%# Eval("TSRValue") %>'  runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
</asp:gridview>

在后面的代码中

        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("AwardID", typeof(string)));
        dt.Columns.Add(new DataColumn("AwardName", typeof(string)));
        dt.Columns.Add(new DataColumn("ESBValue", typeof(string)));
        dt.Columns.Add(new DataColumn("TSRValue", typeof(string)));
        DataRow[] PSPAwards = dtAwards.Select("AWARDTYPE = 'PSP'");
        foreach (DataRow dr in PSPAwards)
        {
            dt.Rows.Add(dr["AWARDID"].ToString(), dr["AWARDNAME"].ToString(), "0", "100");
        }
        ViewState["ESBAndTSRValuesDataTable"] = dt;
        ESBAndTSRValuesInputGridView.DataSource = dt;
        ESBAndTSRValuesInputGridView.DataBind();

【讨论】:

  • 不,不是这样..输出结果没有区别..:/
  • 试过了..还是不行..但是,我遇到的一个问题是默认值之前没有显示在 GridView 中(即没有显示 0 和 100 值)..现在他们显示了up .. 但是,当我更改它们然后进入代码隐藏时,它仍然到处都是 0 和 100 .. :(
【解决方案2】:

有时框架无法使用新数据刷新 DataSet/Datatable。

尝试清除网格数据源。

ESBAndTSRValuesInputGridView.DataSource = null;
ESBAndTSRValuesInputGridView.DataBind();
ESBAndTSRValuesInputGridView.DataSource = dt;
ESBAndTSRValuesInputGridView.DataBind();

所以你的代码将是

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Award ID", typeof(string)));
dt.Columns.Add(new DataColumn("Award Name", typeof(string)));
dt.Columns.Add(new DataColumn("ESB Value", typeof(string)));
dt.Columns.Add(new DataColumn("TSR Value", typeof(string)));
DataRow[] PSPAwards =  dtAwards.Select("AWARDTYPE = 'PSP'");
foreach (DataRow dr in PSPAwards)
{
    dt.Rows.Add(dr["AWARDID"].ToString(), dr["AWARDNAME"].ToString(), "0", "100");
}
ViewState["ESBAndTSRValuesDataTable"] = dt;
ESBAndTSRValuesInputGridView.DataSource = null;
ESBAndTSRValuesInputGridView.DataBind();

ESBAndTSRValuesInputGridView.DataSource = dt;
ESBAndTSRValuesInputGridView.DataBind();

【讨论】:

  • 特别是在重新绑定您的网格之前。
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
相关资源
最近更新 更多