2012-05-09 38 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; 
    } 
}