使Gridview列不可见,但仍然可以访问其数据

时间:2011-07-19 12:55:45

标签: c# asp.net gridview invisible

我已经阅读了很多这方面的帖子,特别是在这个网站上,但我仍然无法找到我正在寻找的内容。我在.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>

3 个答案:

答案 0 :(得分:1)

您可以将HiddenField用于要隐藏的值。当你可以隐藏控件时,无需创建整列。

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

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

答案 1 :(得分:1)

无论您想在何处使用列值,只需在GridView中使用<%# Eval("ColumnName") %> 所有数据源(在您的情况下为数据集)值都可以在GridView的上下文中的DataBinder中使用。

答案 2 :(得分:0)

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