2012-05-09 71 views
0

我有一個現有的datagridview和一個搜索文本框。搜索並重新加載datagridview

當我鍵入一個搜索文本,然後單擊基於下面的方法(使用存儲過程)的搜索按鈕,我喜歡讓它自動重新加載與搜索結果的datagridview。

我該如何做到這一點?

public static void searchAny(String searchFields, String tblName, String connectionString, SqlCommand tblscmd, SqlDataAdapter tbldataadaptor, DataTable tbldatatable, SqlCommandBuilder cmbuilder, DataGridView DataGridViewName) 
{ 
    using (SqlConnection tblconn = new SqlConnection(connectionString)) 
    { 
     tblconn.Open(); 
     SqlCommand tblcmd = new SqlCommand(); 
     tblcmd.Connection = tblconn; 
     tblcmd.CommandType = CommandType.StoredProcedure; 
     tblcmd.CommandText = "usp_searchany"; 
     tblcmd.Parameters.Add("@stringToFind", SqlDbType.NVarChar); 
     tblcmd.Parameters["@stringToFind"].Value = "%" + searchFields + "%"; 
     tblcmd.Parameters.Add("@table", SqlDbType.NVarChar); 
     tblcmd.Parameters["@table"].Value = tblName; 
     cmbuilder.DataAdapter = tbldataadaptor; 
     tbldatatable.DefaultView.AllowDelete = true; 
     tbldatatable.DefaultView.AllowEdit = true; 
     tbldataadaptor.Fill(tbldatatable); 
     DataGridViewName.ReadOnly = false; 
     DataGridViewName.DataSource = tbldatatable; 
     tblconn.Close(); 
    } 
} 


private void SearchButton_Click(object sender, EventArgs e) 
{ 
    tbldatatable.Clear(); 
    String searchFields = SearchTextBox.Text; 
    GeneralMethods.searchAny(searchFields, "tblClients", connectionString, tblcmd, tbldataadaptor, tbldatatable, cmbuilder, dataGridView); 
    dataGridView.DataSource = tbldatatable; 
    dataGridView.Refresh(); 
} 
+1

問題是什麼嗎?網格是否被填滿? – Kangkan

+0

我使用了上述方法,它不返回搜索結果,也沒有刷新datatable/datagridview。 – kyusan93

+2

你需要清除datagridview,綁定並刷新。 – Kangkan

回答

1

你必須過濾你的DataGridView的DataSource ...像下面的方式......它不是必需的清除,結合或刷新的datagridview ...

從CellEndEidt這是可能的.. ..

只要你可以過濾在DataGridView的DataSource

private void MyDataGrid1_CellEndEdit(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) 
{ 
    if (e.RowIndex == 0) 
     { 
     if (myDataGrid1.CurrentCell.Value.ToString().Trim().Length > 0) 
     { 
      MyFilterString="Field1=Feild2 and Field3>Field4"; 
     } 
     MyDtb1.DefaultView.RowFilter = FilterString; 
    } 
}