2016-02-11 25 views
0

我有一個gridview包含庫存數據。我試圖將一個搜索函數放在一起,該函數將根據gridview頭中每個控件的內容,即時創建一個SQL WHERE子句。訪問gridview標題中的文本框值

gridview中的每一列都是一個模板字段,其中的控件添加在頁眉模板中。

這是我的代碼。每當它運行時,控件(在本例中爲chkCaseSearch)爲空,並且我得到「對象引用未設置爲對象實例」的錯誤。

這是我的C#代碼;它位於按鈕單擊事件中(該按鈕也是GridView標題中的一個控件)。每個控件都有一個等價的if語句,但爲了簡潔起見,我只顯示一個。

謝謝!

TextBox tbManufacturerSearch = gvFirearms.FindControl("txtManufacturerSearch") as TextBox; 
TextBox tbModelSearch = gvFirearms.FindControl("txtModelSearch") as TextBox; 
TextBox tbSerialSearch = gvFirearms.FindControl("txtSerialSearch") as TextBox; 
TextBox tbCaliberSearch = gvFirearms.FindControl("txtCaliberSearch") as TextBox; 
DropDownList ddlTypeSearch = gvFirearms.FindControl("ddlTypeSearch") as DropDownList; 
DropDownList ddlFormSearch = gvFirearms.FindControl("ddlFormSearch") as DropDownList; 
CheckBox chkCaseSearch = gvFirearms.FindControl("chkCaseSearch") as CheckBox; 
TextBox tbMagazineSearch = gvFirearms.FindControl("txtMagazineSearch") as TextBox; 
TextBox tbLocationSearch = gvFirearms.FindControl("txtLocationSearch") as TextBox; 
TextBox tbCommentsSearch = gvFirearms.FindControl("txtCommentsSearch") as TextBox; 

if (chkCaseSearch.Checked) 
{ 
    strWhereClause = "[Case] = 1"; 
} 
else if (!chkCaseSearch.Checked) 
{ 
    strWhereClause = "[Case] = 0"; 
} 

回答

1

看起來你必須通過HeaderRow訪問它像這樣

複選框chkCaseSearch = gvFirearms.HeaderRow.FindControl( 「chkCaseSearch」)的複選框;

0

如果您在網絡環境中,您是否在您的aspx頁面中指定了ID標籤? 如果您處於Winform應用程序中,則只需調用(例如)this.txtMagazineSearch即可訪問控件屬性。

+0

這是網絡。我確實添加了ID標籤: '的
' – pmbasehore

0

GridView控件是一個數據集的呈現工具,這樣你就可以

  • 再生的飛行數據集,並重新綁定到GridView,如果您想通過過濾的信息
  • 迭代在diplayed項目,以證明一個符合標準

在第一種情況下,我覺得是比較貼切的,你可以在使用「刷新」按鈕OnClickEvent是這樣的:

protected void cmdRefresh_Click(object sender, EventArgs e) 
{ 

     SqlConnection conn = new SqlConnection(connectionManager.getConnectionString("myDB")); 
     SqlCommand cmd = new SqlCommand("myQry", conn); 
     cmd.CommandType = System.Data.CommandType.StoredProcedure; 

     SqlDataReader rdr; 

     cmd.Parameters.Add(new SqlParameter("@Par1", chkCaseSearch.Checked)); 
     try 
     { 
      conn.Open(); 
      rdr = cmd.ExecuteReader(); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

     grdView1.DataSource = rdr; 
     grdView1.DataBind(); 
} 

您可以使用包含SQL命令的文本替換存儲過程定義來啓動。

希望得到這個幫助。

保羅

+0

,所以我可以直接使用控件作爲參數,而不必首先在gridview之外聲明它們?我試圖做類似的事情,但Intellisense說這個控制不存在。 – pmbasehore

0

我需要具體告訴gridview我正在尋找的控件是在標題行。

TextBox tbManufacturerSearch = gvFirearms.HeaderRow.FindControl("txtManufacturerSearch") as TextBox; 

即使有始終只使用該名稱爲GridView的每一次迭代控制,但它仍然需要被告知哪一行特別是英寸

謝謝!