2011-07-26 3 views
1

バインドされていないグリッドビュー内の列を不可視、特にidにしようとしています。私はADO.netでグリッドをバインドしているので、HTMLコードのタグを不可視に設定することはできません。ここにいくつかのコードがあります。ASP.netバインドされていない列を非表示にする

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(); 


    } 

これは基本的な古いASP.net検索機能です。しかし、このグリッドビューでは、このような選択を可能にしています...

protected void gv_search_SelectedIndexChanged(object sender, EventArgs e) 
    { 

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

私はoidをデータキータブに設定することができます。しかし、私はこれを不可視にしたい。私は誰もがこれを行う方法を知っている...それは私にこのエラーを与えた...ここ

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

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

を、この方法を試してみましたか?おかげでデータバインドイベントに

答えて

3

は、あなたがのaspxファイル内に表示する列を宣言します。 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> 

Visible="False"に希望の列を設定します。

+0

素晴らしい回答!私は同じ質問と同じ質問を投稿する前に2つの他の答えを試しました。 ididntが自動生成を使用するとき、グリッドが何も表示されないので、私はもう少し自動生成を理解しています。今私は列を設定しているかどうかを知っています。自動生成が必要な場合は、列はまだポップアップします。ありがとう! –

+0

問題ありません。列が変更されていない場合でも、常にこのメソッドを使用します。これは、将来のカスタマイズを容易にします。 – Jeremy

0

変更を:

protected void gv_search_DataBound(object sender, EventArgs e) 
{ 

    gv_search.Columns[0].Visible = false; 
} 
関連する問題