【问题标题】:Make Gridview column invisible, but still access its data使 Gridview 列不可见,但仍可访问其数据
【发布时间】:2011-07-19 12:55:44
【问题描述】:

我已经阅读了很多关于这方面的帖子,尤其是在这个网站上,但我仍然找不到我正在寻找的确切内容。我在 .cs 文件中填充我的 Gridview,而不是在 .aspx 中添加到它的 Columns 部分。我有两个字段我希望仍然可以引用,但希望它们不可见。我知道 Gridview 对这类事情并不是特别好......但是有什么方法可以实现我所缺少的吗?

.cs

protected void searchFill()
{
    orderByString = orderByList.SelectedItem.Value;
    fieldString = searchTextBox.Text;
    string sqlStatement = "SELECT fName AS [First], lName as [Last], addr AS [Address], email AS [Email], phone AS [Phone], ccType AS [Credit Card Type], length AS [Length], IdentityColumn, processed FROM SecureOrders WHERE fName LIKE '%" + fieldString + "%' OR lName LIKE'%" + fieldString + "%' OR addr LIKE'%" + fieldString + "%' OR addr2 LIKE'%" + fieldString + "%' OR city LIKE'%" + fieldString + "%' OR state LIKE'%" + fieldString + "%' OR zip LIKE'%" + fieldString + "%' OR zip LIKE'%" + fieldString + "%' OR country LIKE'%" + fieldString + "%' OR email LIKE'%" + fieldString + "%' OR phone LIKE'%" + fieldString + "%' OR ccType LIKE'%" + fieldString + "%' OR ccNum LIKE'%" + fieldString + "%' OR ccExp LIKE'%" + fieldString + "%' OR cwaSource LIKE'%" + fieldString + "%' OR cwaJoined LIKE'%" + fieldString + "%' OR length LIKE'%" + fieldString + "%' OR delivery LIKE'%" + fieldString + "%' OR price LIKE'%" + fieldString + "%' OR url LIKE'%" + fieldString + "%' ORDER BY " + orderByString;
    using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
    {
        connection.Open();
        SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStatement, connection);
        dataAdapter.SelectCommand.Parameters.AddWithValue("@fieldString", fieldString);
        dataAdapter.SelectCommand.Parameters.AddWithValue("@orderByString", orderByString);
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
        DataSet dataSet = new DataSet();

        dataAdapter.Fill(dataSet, "SecureOrders");

        DataView source = new DataView(dataSet.Tables[0]);
        DefaultGrid.DataSource = source;
        DefaultGrid.DataBind();

        connection.Close();
    }
}

.aspx

 <asp:GridView ID="DefaultGrid" 
        runat = "server" 
        DataKeyNames = "IdentityColumn"
        onselectedindexchanged = "DefaultGrid_SelectedIndexChanged"
        autogenerateselectbutton = "true"
        enableviewstate = "false"
        selectedindex="1">
    <SelectedRowStyle BackColor="Azure"
        forecolor="Black"
        font-bold="true" />
    <Columns>
    <asp:TemplateField HeaderText = "Processed">
        <ItemTemplate>
            <asp:CheckBox 
                ID="CheckBoxProcess" 
                AutoPostBack="true" 
                Checked='<%#Eval("processed") %>'
                OnCheckedChanged="CheckBoxProcess_CheckedChanged"
                runat="server"
                Enabled="true" />
        </ItemTemplate>
    </asp:TemplateField>
    </Columns>
 </asp:GridView>

【问题讨论】:

  • 你想对页面上这些不可见的列做什么?
  • 您是否需要这样做?为什么不能将它们放在 .aspx 中?
  • 其中之一是 IdentityColumn,当​​您单击该行时,它会使用该数据中的数字来查找数据库中的相应字段。另一个有点倒退,但我正在使用该数据填充数据库另一列中的复选框。我只会使用该字段本身,但它显示为灰色...
  • 我想除了我不完全知道如何在 .aspx 中执行此操作这一事实之外,没有什么特别的原因 - 如果我确实添加了一个更简单的方法来实现这一点它在 .aspx 中?

标签: c# asp.net gridview invisible


【解决方案1】:

无论您想在何处使用列值,只需在 GridView 中使用 &lt;%# Eval("ColumnName") %&gt;
GridView 上下文中的 DataBinder 中提供了所有数据源(在您的情况下为数据集)值。

【讨论】:

  • 但是该列需要是不可见的。
  • 基本上不知道如何设置列不可见。
  • 列可以不可见,用你喜欢的eval方式,设置样式为display:hidden。
  • 如果您可以编写代码以显示您想要对处于非隐藏状态的字段执行的操作,然后提及您想要隐藏的内容会有所帮助。
【解决方案2】:

您可以只对要隐藏的值使用 HiddenFields。当您可以隐藏控件时,无需创建整个列。

<asp:HiddenField runat="server" ID="hdf_Identity" Value='<%# Eval("IdentityField") %>' />

当您想找到它们时,只需在 gridview 行中搜索它们。 Here 是一些可能有帮助的 msdn 文档。

【讨论】:

    【解决方案3】:

    您可以使用 display:hidden 创建一个 CSS 类“HiddenCol”。然后使用该类设置要隐藏的列的样式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2013-05-08
      • 2011-11-25
      相关资源
      最近更新 更多