2013-09-05 61 views
0

我試圖讓DataGridView僅顯示輸入姓氏的行。從那裏我可以建立我的程序的其餘部分,但我碰到了一個速度障礙。我在線看到了我的​​事件中的那段代碼,但它不起作用。它在其他支架處斷裂。有什麼建議? 對不起,我是新來的,但如果我一旦學會,我會永遠記得。選擇並顯示DataGridView中的某些行

public partial class Form1 : Form 
{ 
    string LastName; 
    //string FirstName; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.aRMORERS_TableAdapter.Fill(this.armorersDataSet._ARMORERS_); 
    } 

    private void Submit_Button_Click(object sender, EventArgs e) 
    { 
     LastName = LastName_TextBox.Text; 
     //FirstName = FirstName_TextBox.Text; 
     for (int i = 0; i < this.dataGridView1.Rows.Count; i++) 
     { 
      if (dataGridView1.Rows[i].Cells[0].Value.ToString() == LastName) 
      { 
       dataGridView1.Rows[i].Selected = true; 
       dataGridView1.Rows[i].Visible = true; 
      } 
      else 
      { 
       dataGridView1.Rows[i].Visible = false; 
       dataGridView1.Rows[i].Selected = false; 
      } 
     } 
    } 
} 
+0

我想象dgtest是一個DataGrid –

+0

是的,你是對的。修復了這個問題,謝謝。但現在它只是打破 –

+0

它是如何打破? –

回答

0

我建議你使用過濾代替循環。

嘗試通過以下在​​事件處理程序替換代碼:

private void Submit_Button_Click(object sender, EventArgs e) 
    { 
     string lastName = LastName_TextBox.Text; 
     (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = 
      string.Format("Field_Name = '{0}'", lastName); 
    } 

其中「FIELD_NAME」應該由你的列名替換。

P.S.如果不需要姓氏的精確匹配,則可以使用LIKE運算符和通配符來使用「包含」和「開始於」(或「結束於」)模式進行篩選。

包含在文本框中的所有字符:string.Format("Field_Name LIKE '*{0}*'", lastName);

開始與字符的文本框:string.Format("Field_Name LIKE '{0}*'", lastName);

結尾爲:string.Format("Field_Name LIKE '*{0}'", lastName);