خب شما مگه توی کد های button ای که گریدویو رو پر میکنه تنظیماتشو انجام ندادی؟؟؟
نگاه کن ، شما وقتی میتونی تنظیماتی مثل عرض ستون ها رو انجام بدی که گریدویو پر باشه
شما برای تعیین عرض ستون ها فکر میکنم به احتمال زیاد از این کد استفاده میکنی
dataGridView1.Columns[0].Width = 50;
خب این کد یعنی چی؟؟؟ یعنی این که برو تو گرید ویو اولین ستونشو پیدا کن و عرضشو 50 کن
پس این کد باید وقتی عمل کنه که گرید ویو پر شده باشه یعنی کد زیر اتفاق افتاده باشه
dataGridView1.DataSource = dt;
اگه شما قبل این که گریدویو رو پرکرده باشین بیاین بگین عرض ستون اولو 50 قرار بده کار نمیکنه چون ستونی تو گریدویو وجود نداره که بخواد بکنه 50
پس شما باید بعد هر بار پر کردن گریدویو تنظیماتتو انجام بدی
طبیعیه که شما dgv.datasource رو null کنید تنظیماتشم باهاش پاک میشه
به خاطر همین میگم بعد هر بار پرکردن گریدویو باید تنظیماتش هم اجرا بشه یعنی یه چیزی مثل کد زیر
private void button1_Click(object sender, EventArgs e)
{
SqlConnection sc = new SqlConnection("Data Source=.;Initial Catalog=db2;Integrated Security=True");
SqlDataAdapter sd = new SqlDataAdapter("select * from t1",sc);
DataTable dt = new DataTable();
sd.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].Width = 50;
dataGridView1.Columns[1].Width = 60;
dataGridView1.Columns[0].HeaderText = "نام";
dataGridView1.Columns[1].HeaderText = "نام خانوادگی";
}