0

DataTable にバインドしようとした GridView のセットアップがあります。次に、Web ページを介して 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 で行を初期化していることがわかります。これは、Web ページからこれらの値を変更した後のデバッグ イベント中に表示されるものです。

GridView に行われたすべての変更を、リンクされた DataTable に自動的に永続化するにはどうすればよいですか?

私はVS2005で.NET 2.0 Frameworkを使用しています..

4

2 に答える 2

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();
于 2013-06-28T13:13:38.953 に答える
0

フレームワークが新しいデータで 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-06-28T12:50:38.920 に答える