从隐藏边界字段中获取值?ASP.NET
本文关键字:ASP NET 获取 隐藏 边界 字段 | 更新日期: 2023-09-27 18:30:01
我知道我要问的问题已经被其他人问过了,但这些答案并不能解决我的问题。
我有一个包含2个BoundFields、2个ButtonFields和一个复选框字段(这是一个TemplateField)的网格视图。
我还有一个数据表,里面装满了数据库中的数据。
在aspx代码中,我创建了我的网格视图,其中的字段设置为最后一个BoundField Visible = false
。
在我的codeehind中,我添加列并将数据源绑定到我的数据表。
但是,当我试图从隐藏的边界字段中读取数据时,该字段是空的。我之所以不能使用类似问题中提到的解决方案,是因为人们认为数据是一个接一个地填写的,而不是通过将数据表绑定到gridview的数据源。
所以我的问题是:他们是否有一种方法可以从隐藏的边界字段中获取数据,并通过将数据表绑定到gridview的数据源来保留添加数据的可能性?如果是的话,是否可以从该字段中获取值?
p.s.我在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();
}
所以现在我需要从网格视图(特别是从隐藏边界字段)获取数据,因为他们可以编辑除隐藏边界字段之外的网格视图,所以这是知道它是哪一行的唯一方法。
为需要获取的列添加一个数据键:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="hidden" ...>
一旦添加了数据键,就可以使用行索引访问其值:
var rowIndex = 0;
var hiddenValue = (string)GridView1.DataKeys[rowIndex]["hidden"];
另一个选项是保持BoundField(或任何其他类型的列)在标记中可见(删除visible=False),并使用RowDataBound事件隐藏列:
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[COLUMN_USERID].Visible = false;
}
您可以使用此代码。我测试过了。
TextBox1.Text = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
这是一篇非常古老的帖子,但对于仍然感兴趣的人来说,有一种更简单的方法。替换此:
Visible = false
这个:
ItemStyle-CssClass="c_hidden"
然后创建一个具有"display:none"的类。效果是一样的,但您的应用程序可以看到价值。