简体   繁体   English

ASP.net使“未绑定”列不可见

[英]ASP.net Making Unbound column invisible

I'm trying to get a column in my unbound gridview to be invisible, specifically the id. 我试图在未绑定的网格视图中获取一列以使其不可见,尤其是id。 I'm binding the grid with ADO.net, so I cant just set the tag in the html code to invisible. 我将网格与ADO.net绑定在一起,所以我不能只将html代码中的标记设置为不可见。 Here is some code... 这是一些代码......

    protected void btn_search_Click(object sender, EventArgs e)
    {
        SqlConnection cs = new SqlConnection("Data Source=WILSON-PC; Initial Catalog=KamManOnline; Integrated Security=TRUE");



        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();

        da.SelectCommand = new SqlCommand("SELECT oid, Supplier, DepartmentA, DepartmentB, DepartmentC, OrderNumber, CONVERT(varchar(10), PORecieptDate, 101) AS PORecieptDate, CONVERT(varchar(10), ProductRecieved, 101) AS ProductRecieved, CONVERT(varchar(10),POEntryDate, 101) AS POEntryDate FROM tbl_OrderD WHERE (Supplier = @Supplier OR @Supplier IS NULL) AND (DepartmentA = @DepartmentA OR @DepartmentA IS NULL) AND (OrderNumber = @OrderNumber OR @OrderNumber IS NULL) AND (PORecieptDate BETWEEN @FromA AND @ToA OR (@FromA IS NULL AND @ToA IS NULL)) AND (ProductRecieved BETWEEN @FromB AND @ToB OR (@FromB IS NULL AND @ToB IS NULL)) AND (POEntryDate BETWEEN @FromC AND @ToC OR (@FromC IS NULL AND @ToC IS NULL))", cs);



        if (!chk_Suppliers.Checked) da.SelectCommand.Parameters.Add("@Supplier", SqlDbType.VarChar).Value = ddl_SupplierView.Text.ToString();
        else da.SelectCommand.Parameters.Add("@Supplier", SqlDbType.VarChar).Value = DBNull.Value;

        if (!chk_Departments.Checked) da.SelectCommand.Parameters.Add("@DepartmentA", SqlDbType.VarChar).Value = ddl_DepartmentView.Text.ToString();
        else da.SelectCommand.Parameters.Add("@DepartmentA", SqlDbType.VarChar).Value = DBNull.Value;

        if (txt_orderNumView.Text != "") da.SelectCommand.Parameters.Add("@OrderNumber", SqlDbType.VarChar).Value = txt_orderNumView.Text.ToString();
        else da.SelectCommand.Parameters.Add("@OrderNumber", SqlDbType.VarChar).Value = DBNull.Value;

        if (txt_PORecievedFrom.Text != "" && txt_PORecievedTo.Text != "")
        {
            da.SelectCommand.Parameters.Add("FromA", SqlDbType.SmallDateTime).Value = txt_PORecievedFrom.Text.ToString();
            da.SelectCommand.Parameters.Add("ToA", SqlDbType.Date).Value = txt_PORecievedTo.Text.ToString();
        }

        else
        {
            da.SelectCommand.Parameters.Add("FromA", SqlDbType.Date).Value = DBNull.Value;
            da.SelectCommand.Parameters.Add("ToA", SqlDbType.Date).Value = DBNull.Value;
        }

        if (txt_ProductRecievedFrom.Text != "" && txt_ProductRecievedTo.Text != "")
        {
            da.SelectCommand.Parameters.Add("FromB", SqlDbType.Date).Value = txt_PORecievedFrom.Text;
            da.SelectCommand.Parameters.Add("ToB", SqlDbType.Date).Value = txt_PORecievedTo.Text;
        }

        else
        {
            da.SelectCommand.Parameters.Add("FromB", SqlDbType.Date).Value = DBNull.Value;
            da.SelectCommand.Parameters.Add("ToB", SqlDbType.Date).Value = DBNull.Value;
        }

        if (txt_POEntryFrom.Text != "" && txt_poEntryTo.Text != "")
        {
            da.SelectCommand.Parameters.Add("FromC", SqlDbType.Date).Value = txt_PORecievedFrom.Text;
            da.SelectCommand.Parameters.Add("ToC", SqlDbType.Date).Value = txt_PORecievedTo.Text;
        }

        else
        {
            da.SelectCommand.Parameters.Add("FromC", SqlDbType.Date).Value = DBNull.Value;
            da.SelectCommand.Parameters.Add("ToC", SqlDbType.Date).Value = DBNull.Value;
        }

        ds.Clear();

        da.Fill(ds);

        gv_search.DataSource = ds.Tables[0];
        gv_search.DataBind();


    }

this is your basic good old ASP.net search function. 这是您基本的旧ASP.net搜索功能。 However, in this gridview I enable selecting like this... 但是,在此gridview中,我可以像这样进行选择...

    protected void gv_search_SelectedIndexChanged(object sender, EventArgs e)
    {

        Response.Redirect("selectedOrder.aspx?oid=" + gv_search.SelectedValue.ToString());
    }

I know I can set the oid to be the datakey tab. 我知道我可以将oid设置为datakey标签。 However, I want to make this invisible. 但是,我想使它不可见。 I have tried this method here... 我在这里尝试过这种方法...

    protected void gv_search_RowCreated(object sender, GridViewRowEventArgs e)
    {
        gv_search.Columns[0].Visible = false;
    }

It gave me this error... 它给了我这个错误...

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Does anyone know how to do this? 有谁知道如何做到这一点? Thanks 谢谢

Declare the columns you want displayed inside the aspx file. 声明要在aspx文件中显示的列。 Tell the grid to not generate columns using the AutoGenerateColumns="False" property. 告诉网格不要使用AutoGenerateColumns="False"属性生成列。

<asp:DataGrid id="DataGrid1" 
   runat="server" CssClass="grid" 
   AutoGenerateColumns="False">
   <Columns>
      <asp:BoundColumn 
         DataField="OrderID" ReadOnly="True" 
         HeaderText="Order ID" />
      <asp:BoundColumn 
         DataField="ShipName" HeaderText="Ship to" 
         ReadOnly="True" />
      <asp:BoundColumn 
         DataField="ShipCountry" HeaderText="Country" 
         ReadOnly="True" />
     <asp:BoundColumn 
         DataField="ShipCountry" HeaderText="Country" 
         Visible="False" />
   </Columns>
</asp:DataGrid>

Set the desired columns to Visible="False" . 将所需的列设置为Visible="False"

Change it to the DataBound event: 将其更改为DataBound事件:

protected void gv_search_DataBound(object sender, EventArgs e)
{

    gv_search.Columns[0].Visible = false;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM