我知道我要问的问题已经被其他人问过了,但是那些答案对我的问题没有解决。
我的 gridview 包含 2 个 BoundFields、2 个 ButtonFields 和一个复选框字段(这是一个 TemplateField)。
我还有一个数据表,其中包含从数据库中获取的数据。
在 aspx 代码中,我使用字段创建我的 gridview 并将最后一个 BoundField 设置为 Visible = false
。
在我的代码后台中,我添加列并将数据源绑定到我的 datatable。
但是当我尝试读取隐藏的 boundfield 中的数据时,该字段为空。我不能使用类似问题中提到的解决方案的原因是这些人假设数据逐个填充,而不是通过将 datatable 绑定到 gridview 的数据源来填充。
所以我的问题是:有没有办法从隐藏的 boundfield 获取数据,并保留通过将 datatable 绑定到 gridview 的数据源添加数据的可能性?如果可以,是否可以获取该字段的值?
附言:我在 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),因为他们可以编辑GridView,除了隐藏的BoundField之外,所以这是唯一的方法来知道它是哪一行原始数据。
string strHiddenFieldData = gvSelect.Rows[0].Cells[4].ToString();
。但是正如我所说,这会返回一个空字符串 :-( - Wesley Lalieu