我知道我要问的问题已经被其他人问过了,但这些答案并不能解决我的问题。
我有一个包含 2 个 BoundFields、2 个 ButtonFields 和一个复选框字段(这是一个 TemplateField)的 gridview。
我还有一个数据表,里面装满了数据库中的数据。
在 aspx 代码中,我使用设置最后一个 BoundField 的字段创建我的 gridview Visible = false
。
在我的代码隐藏中,我添加了列并将数据源绑定到我的数据表。
但是当我尝试从隐藏的边界域中读取数据时,该域是空的。我不能使用类似问题中提到的解决方案的问题是,人们假设数据是一一填写的,而不是通过将数据表绑定到gridview的数据源。
所以我的问题是:他们是一种从隐藏的boundfield获取数据的方法,并且还保留通过将数据表绑定到gridview的数据源来添加数据的可能性?如果是这样,是否可以从该字段中获取值?
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>
后面的代码(我填充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();
}
所以现在我需要从gridview(特别是从隐藏的boundfield)获取数据,因为他们可以编辑除了隐藏的boundfield之外的gridview,所以这是知道它是哪个原始行的唯一方法。