2013-07-31 71 views
1

在我的gridview中,我有以下的東西,如我在頁面加載中綁定sql和gridview所示,因爲我希望它在打開頁面時加載。如何從gridview中隱藏特定值(列)?

SqlConnection conn = new SqlConnection(); 
     conn.ConnectionString = "Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI"; 
     conn.Open(); 

     DataSet ds = new DataSet(); 

     SqlDataAdapter da = new SqlDataAdapter("SELECT memberreportid, typeofcrime, crdatetime, address, detail, incidentdate, incidenttime, property, victim, suspect from memberreport", conn); 
     da.Fill(ds); 

     GWCase.DataSource = ds; 
     GWCase.DataBind(); 

     conn.Close(); 

但是,我試圖防止財產,受害者和嫌疑人列出現在gridview。我用

Visible = false; 

在我的gridview,但它完全刪除我的gridview(當然)。

我試圖使用的BoundField如在我的GridView如下所示,並設置可見性爲假以專門設置的列的可見假然而,仍然被顯示

<asp:GridView ID="GWCase" runat="server" BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2" ForeColor="Black" Width="100%" AutoGenerateSelectButton="True" OnSelectedIndexChanged="GWCase_SelectedIndexChanged"> 
     <FooterStyle BackColor="#CCCCCC" /> 
     <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" /> 
     <RowStyle BackColor="White" /> 
     <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" /> 
     <SortedAscendingCellStyle BackColor="#F1F1F1" /> 
     <SortedAscendingHeaderStyle BackColor="#808080" /> 
     <SortedDescendingCellStyle BackColor="#CAC9C9" /> 
     <SortedDescendingHeaderStyle BackColor="#383838" /> 

    <Columns> 

     <asp:BoundField DataField="property" HeaderText="property" SortExpression="property" Visible="false"/> 
     <asp:BoundField DataField="victim" HeaderText="victim" SortExpression="victim" Visible="false" /> 
     <asp:BoundField DataField="suspect" HeaderText="suspect" SortExpression="suspect" Visible="false" /> 

    </Columns> 
    </asp:GridView> 

的列。我如何從gridview中刪除3列。請不要問我從我的sql語句中刪除3屬性,因爲我需要數據以實現更多功能。

我也試過這個方法我在這個thread發現SO

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     e.Row.Cells[7].Visible = false; 
     e.Row.Cells[8].Visible = false; 
     e.Row.Cells[9].Visible = false; 
    } 

但它沒有工作,以及:/

問候。

回答

1

您需要在行創建事件中添加此代碼。

protected void yourGrid_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
    e.Row.Cells[7].Visible = false; 
    e.Row.Cells[8].Visible = false; 
    e.Row.Cells[9].Visible = false; 
    } 

編輯:

另一種選擇可以是對網格視圖指定數據源後,你在你的代碼

GWCase.DataSource = ds; 
    GWCase.DataBind(); 

    GWCase.Columns[7].Visible = false; 
    GWCase.Columns[8].Visible = false; 
    GWCase.Columns[9].Visible = false; 
+0

還是一樣 –

+0

@TeoChuenWeiBryan查看我的更新回答 – Ehsan

+0

我將我的數據源和綁定放在我的page_load中。如果我將它粘貼到page_load中,我會得到這個錯誤'錯誤'System.EventArgs'不包含'Row'的定義,也沒有接受類型'System'的第一個參數的擴展方法'Row'。可以找到EventArgs'(你是否缺少使用指令或程序集引用?)' –

0

設置你的GridView的財產AutoGenerateColumns寫這幾行 此行之後錯誤(默認情況下爲true)。然後添加您想要在<Columns>標籤內顯示的所有行,就像您對不想顯示的列所做的那樣。只要您自動生成列,Columns標記就不起作用。

+0

但是,我可以問我的列和boundfield語法是否正確?從我的理解數據字段是我的數據庫名稱,headertext將出現在gridview標題上,但排序表達式如何。我GOOGLE了,它說排序數據,我真的不需要它。我可以刪除它嗎? –

+0

是的,你的語法對我來說是正確的。您對DataField和HeaderText的理解也是正確的,只要您不希望用戶對GridView的特定列進行排序,就可以刪除SortExpression。作爲HeaderText,它是在用戶單擊列標題文本時要排序的列的數據庫名稱。 – Rob

+0

嗯,我已經做到了,我也刪除了可見性。不過,我用這個語法'lblproperty。Text = GWCase.SelectedRow.Cells [8] .Text; lblvictim.Text = GWCase.SelectedRow.Cells [9] .Text; lblsuspect.Text = GWCase.SelectedRow.Cells [10] .Text;'當我選擇行但標籤不顯示任何內容時,將3列的值顯示在標籤中。 –