پیشنهاد :
شما بعد از اینکه داده هاتون رو از دیتابیس ریختید توی Gridview بیایید Gridview رو فیلتر کنید،
این کد شما بار زیادی رو روی دیتابیس داره یعنی با هر بار TextChange به دیتابیس متصل بشید و..... که به نظر من این روش مناسبی نیست.
اینم به قول خودتون ارتباط بین گریدویو و تکست باکس :
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
txtname.Text = dataGridView1[0, dataGridView1.CurrentRow.Index].Value.ToString();
txtfamily.Text = dataGridView1[1, dataGridView1.CurrentRow.Index].Value.ToString();
txtdadname.Text = dataGridView1[2, dataGridView1.CurrentRow.Index].Value.ToString();
txtidbasiji.Text = dataGridView1[3, dataGridView1.CurrentRow.Index].Value.ToString();
txtidpublic.Text = dataGridView1[4, dataGridView1.CurrentRow.Index].Value.ToString();
}