在DataGridView中选择并显示某些行

时间:2013-09-05 13:26:17

标签: c# .net sql datagridview sql-server-2008-r2

我正试图让DataGridView显示 ONLY 输入的姓氏行。从那里我可以构建我的程序的其余部分,但我遇到了速度颠簸。我看到了Submit_Button_Click在线活动中的代码补丁,但它不起作用。它在其他方面打破了。有什么建议? 对不起,我是新手,但如果我学会了,我会永远记得。

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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我建议您使用过滤而不是循环。

尝试通过以下方式替换Submit_Button_Click事件处理程序中的代码:

    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);