我有一个带DataSource
的GridView(SQL数据库)。我想隐藏一列,但是当我选择记录时仍然可以访问该值。有人能告诉我怎么做吗?
这是我要隐藏的列,但仍想访问其值:
<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />
我尝试了隐藏列(属性Visible="false"
)的所有内容,但我无法访问其值。
答案 0 :(得分:77)
<head runat="server">
<title>Accessing GridView Hidden Column value </title>
<style type="text/css">
.hiddencol
{
display: none;
}
</style>
<asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
</asp:BoundField>
ArrayList EmailList = new ArrayList();
foreach (GridViewRow itemrow in gvEmployeeDetails.Rows)
{
EmailList.Add(itemrow.Cells[YourIndex].Text);
}
答案 1 :(得分:44)
如果我没有弄错的话,GridView
不会保留BoundColumns
具有属性visible="false"
的值。你可以在这里做两件事,一件事(如V4Vendetta的答案中所解释的)使用Datakeys
。或者,您可以将BoundColumn
更改为TemplateField
。在ItemTemplate
中,添加Label
之类的控件,将其可见性设为false,并将其值赋予Label
。
答案 2 :(得分:39)
在css中定义样式:
.hiddencol { display: none; }
然后将ItemStyle-CssClass="hiddencol"
和HeaderStyle-CssClass="hiddencol"
属性添加到网格字段:
<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />
答案 3 :(得分:31)
您可以使用DataKeys 来检索此类字段的值,因为(正如您所说)当您将普通BoundField
设置为可见false时,您无法获取其值。
在.aspx
文件中设置GridView
属性
DataKeyNames = "Outlook_ID"
现在,在事件处理程序中,您可以像这样访问此键的值:
grid.DataKeys[rowIndex]["Outlook_ID"]
这将在网格的指定rowindex处为您提供id。
答案 4 :(得分:20)
您可以通过编程方式执行此操作:
grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;
通过这种方式,您可以在数据绑定之前将列设置为visible,以便生成列。 您将列设置为不可见,因此不会显示。
答案 5 :(得分:10)
如果你的TemplateField
列中有GridView
,那么你就拥有了一个名为blah的控件。然后将outlook_id
作为HiddenField
放在那里:
<asp:TemplateField HeaderText="OutlookID">
<ItemTemplate>
<asp:Label ID="blah" runat="server">Existing Control</asp:Label>
<asp:HiddenField ID="HiddenOutlookID" runat="server" Value='<%#Eval("Outlook_ID") %>'/>
</ItemTemplate>
</asp:TemplateField>
现在,在您想要outlook_id
的情况下抓住该行,然后访问该控件
对于RowDataBound
,请访问它:
string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;
如果您在访问点击的行时遇到问题,请回来。并且不要忘记提及您想要访问的事件。
答案 6 :(得分:8)
您可以在服务器端创建列hidden
,由于某种原因,这与执行aspx
代码不同。它仍然可以被引用,就像它是可见的一样。只需将此代码添加到OnDataBound
事件中即可。
protected void gvSearchResults_DataBound(object sender, EventArgs e)
{
GridView gridView = (GridView)sender;
if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0)
{
gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false;
}
foreach (GridViewRow row in gvSearchResults.Rows)
{
row.Cells[UserIdColumnIndex].Visible = false;
}
}
答案 7 :(得分:4)
在填写GridView
之前保留可见列。填写GridView
,然后隐藏列。
答案 8 :(得分:2)
我有一个新解决方案使用 css 或 javascript 或 jquery 隐藏客户端列。
.col0
{
display: none;
}
并设置gvClientDetails.Columns[0].Visible = true;
,如果设置为false
。
答案 9 :(得分:2)
以下是如何获取GridView
中设置为Visible=False
的隐藏列的值:将此情况SpecialInstructions
中的数据字段添加到绑定的DataKeyNames属性GridView,并以这种方式访问它。
txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")
这就是它,每次都非常简单。
答案 10 :(得分:1)
我使用了类似于user496892的方法:
SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);
grid.DataSource = myDataSource;
grid.DataBind();
hiddenField.Visible = false;
答案 11 :(得分:0)
你可以在后面编写代码。
对于数据绑定后的列, Set visible= false
。
之后,您可以再次从网格视图中的 row_selection 功能中查看“ true ”。它会工作!!
答案 12 :(得分:0)
如果我想在显示GridView
之前访问GridView
的某些值。
BoundField
并正常绑定DataField
。RowDataBound
事件中,我会在该事件中执行某些操作。出现GridView
之前,我写了这个:
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}