私が尋ねようとしている質問が他の人からすでに尋ねられていることは知っていますが、それらの答えは私の問題の解決策ではありません.
2 つの BoundFields、2 つの ButtonFields、およびチェックボックス フィールド (TemplateField) を含むグリッドビューがあります。
データベースからのデータで満たされたデータテーブルもあります。
aspx コードでは、フィールドが最後の BoundField に設定されたグリッドビューを作成しますVisible = false
。
コード ビハインドでは、列を追加し、データ ソースをデータ テーブルにバインドします。
しかし、非表示の境界フィールドからデータを読み取ろうとすると、そのフィールドは空です。同様の質問で言及されているソリューションを使用できない問題は、グリッドビューのデータソースにデータテーブルをバインドするのではなく、データが1つずつ入力されると人々が想定しているためです。
私の質問は次のとおりです。非表示の境界フィールドからデータを取得し、データテーブルをグリッドビューのデータソースにバインドしてデータを追加する可能性を保持する方法ですか? もしそうなら、そのフィールドから値を取得することは可能ですか?
ps Visual Studio 2010 で asp.net/c# を使用しています
ASPX:
<asp:GridView ID="gvSelect" runat="server" AutoGenerateColumns="False" BorderStyle="None" onrowcommand="gvTestSelect_RowCommand">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox runat="server" ID="cbHeader" OnPreRender="cbHeader_PreRender" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="cbItems" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="field" HeaderText="Veld" SortExpression="field" />
<asp:ButtonField DataTextField="up" HeaderText="Omhoog" SortExpression="up" CommandName="up" Text="↑" />
<asp:ButtonField DataTextField="down" HeaderText="Omlaag" SortExpression="down" CommandName="down" Text="↓" />
<asp:BoundField DataField="hidden" SortExpression="hidden" />
</Columns>
</asp:GridView>
コード ビハインド (グリッドビューを埋める場所):
//create array list and fill it with all columns
Dictionary<string, string> dict = FillLists.getColumnsByTable(loader, ddlInfoTableI.SelectedItem.Value.ToString());
//loop trough dictionary
foreach (var val in dict)
{
//create new dtSelect datarow
DataRow dr = dtSelect.NewRow();
//set row values for column values
dr["select"] = false;
dr["field"] = val.Value.ToString();
dr["up"] = new ButtonField { CommandName = "up", Text = loader.LoadResourceString(1024), HeaderText = "↑", ButtonType = ButtonType.Button, Visible = true };
dr["down"] = new ButtonField { CommandName = "down", Text = loader.LoadResourceString(1025), HeaderText = "↓", ButtonType = ButtonType.Button, Visible = true };
dr["hidden"] = val.Key.ToString();
//add the datarow
dtSelect.Rows.Add(dr);
//set datatable session to datatable
Session["dtSelect"] = dtSelect;
//set datasource of the gridview to datatable
gvSelect.DataSource = dtSelect;
//bind data to gridview
gvSelect.DataBind();
}
したがって、非表示のboundfieldを除いてgridviewを編集できるため、gridviewから(特に非表示のboundfieldから)データを取得する必要があります。これが、元の行がどの行であったかを知る唯一の方法です。