PDA

View Full Version : درست کار نکردن دکمه حذف پس از جستجو در GridView



bahane274
سه شنبه 19 مرداد 1389, 20:12 عصر
سلام دوستان !
من در فرمم یک DataGridView گذاشتم و یک دکمه حذف که با زدن آن سطرهای انتخابی از گریدویو حذف میشه. در ضمن در همین فرم که فرم جستجومه دوتا TextBox گذاشتم و یک دکمه جستجو که رکوردها رو از شماره ردیفِ فلان تا فلان جستجو میکنه و در همین گریدویو نمایش میده.
دکمه ی Delete ام در حالت عادی درست کار میکنه اما وقتی سرچ انجام میشه و محتویات گرید ویو تغییر میکنه با زدن دکمه حذف ، گریدویو آپدیت نمیشه و حذف رکورد رو نمایش نمیده.
چون فیلدهای جدولم خیلی زیاده نمیخوام یک فیلد از نوع Button به GridView اضافه کنم که اون عمل Delete رو انجام بده.
در ضمن می خوام بعد از حذف اون رکورد خاص ، همون رکورهای سرچ شده نمایش داده بشه نه کل رکوردهام.
شما برای حل این مشکل راه کاری دارید؟:گیج:
این کد Search ِ:





string sqlRadif = @"Select * From sepordeha WHERE Baygani='False' And ShomareRadif BETWEEN " + Convert.ToInt32(textBox15.Text) + " AND " + Convert.ToInt32(textBox16.Text);



SqlDataAdapter da1 = newSqlDataAdapter(sqlRadif, con);
DataSet ds2 = newDataSet();
da1.Fill(ds2, "sepordeha");
dataGridView1.DataBindings.Clear();
dataGridView1.DataBindings.Add(newBinding("Datasource", ds2, "sepordeha"));
dataGridView1.DataBindings.Clear();


و اینم کد Delete:






string sn;




SqlCommand cmd = newSqlCommand();

string sqlDel;

sn = dataGridView1.CurrentRow.Cells[0].Value.ToString();
sqlDel = "Delete FROM sepordeha WHERE ShomareRadif=" + sn;
cmd.CommandText = sqlDel;
cmd.Connection = con;
cmd.ExecuteNonQuery();
ds.Clear();
string sql = "select * from Sepordeha Where Baygani='False'";
SqlDataAdapter dap = newSqlDataAdapter(sql, con);
dap.Fill(ds, "Sepordeha");
dataGridView1.Update();

Rocker
سه شنبه 19 مرداد 1389, 20:44 عصر
وای خدا سرم گیج رفت از خوندن این تاپیک
یه خورده مختصر تر مشکلت رو بگو خوب

behnam25214
سه شنبه 19 مرداد 1389, 21:47 عصر
میشه بگی چه خطایی میده یا اصلا خطا نمیده!

sina.md
سه شنبه 19 مرداد 1389, 22:17 عصر
مهندس دوباره باید bind کنی.
جای متد update این چند خط رو بزار.



dataGridView1.DataBindings.Clear();

DataView objDataView = new DataView(DS.Tables["Sepordeha"]);
dataGridView1.DataSource = objDataView;

sina.md
چهارشنبه 20 مرداد 1389, 00:09 صبح
راستی تو باید از یه dataview دیگه استفاده کنی که مقادیر search رو توش داره که در موقع نیاز اون رو bind کنی که مقادیر search رو نشون بده.

bahane274
چهارشنبه 20 مرداد 1389, 10:56 صبح
البته اینکه از یه Gridview دیگه استفاده کنم فکر خوبیه اما من تو فرم Seerch ،
5 تا Tab دارم که براساس فیلدای مختلف جستجو میکنه.اینطوری باید تو یه فرم 10 تا Gridview داشته باشم.اگه راه حل ساده تری دارین ممنون میشم راهنماییم کنین.

Reza_Yarahmadi
چهارشنبه 20 مرداد 1389, 11:33 صبح
این کد رو امتحان کن ببین کاری که میخوای رو انجام میده یا نه


string sqlRadif = @"Select * From sepordeha WHERE Baygani='False' And ShomareRadif BETWEEN " + Convert.ToInt32(textBox15.Text) + " AND " + Convert.ToInt32(textBox16.Text);
SqlDataAdapter da1 = new SqlDataAdapter(sqlRadif, con);
DataSet ds2 = new DataSet();
da1.Fill(ds2, "sepordeha");
dataGridView1.DataSource = ds2.Tables[0];


sn = dataGridView1.CurrentRow.Cells[0].Value.ToString();
SqlCommand Cmd = new SqlCommand("Delete FROM sepordeha WHERE ShomareRadif=" + sn, con);
con.Open();
Cmd.ExecuteNonQuery();
con.Close();
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentR ow.Index);

sina.md
چهارشنبه 20 مرداد 1389, 12:39 عصر
مهندس من نگفتم DataGridView گفتم DataView .

توی اون تیکه کدی که گذاشتم از کلاس DataView استفاده کردم.
وقتی که search کردی مثلا" 5 تا سطر select شد. حالا ازون DataSet که با ا ین 5تا سطر پر شده 1 DataView بزن. بعد این DataView رو bind میکنی به DataGridView.

حالا وقتی که یه سطر از این DataSet رو پاک کردی فقط کافی یه DataView دوباره بزنی و این DataView رو Bind کنی.

حالا بهتر که یبار DataView رو بصورت Global تعریف کنی که بیخودی از فضا استفاده نکنی.

اگه توضیحاتمو درک نکردی بگو که یه Sample برات بنویسم.

bahane274
جمعه 22 مرداد 1389, 13:55 عصر
سلام آقا سینا !
من منظورتونو فهمیدم اما تو کد نویسی جواب نگرفتم.:ناراحت: بیزحمت برام یه Sample بنویسید چون سی شارپ رو تازه شروع کردم و ممکنه تو کد نویسیم اشتباه کرده باشم.