PDA

View Full Version : پیمایش dataGridView



ammarkarimi
پنج شنبه 07 شهریور 1387, 07:46 صبح
روی فرمم یه دیتا گرید هست که با کد به جدول وصله و اطلاعات رو نشون میده.حالا یک کاماند باتون گذاشتم در نقش نکست.که با زدنش به سطر بعدی برم (رکوردبعدی)ولی هر کار کردم نتونستم کدش رو بنویسم.
کمکککککککککککککککککککککک!

ammarkarimi
پنج شنبه 07 شهریور 1387, 08:13 صبح
کامل تر کنم.
کدی که با زدن یک کاماند باتون از سطر فعلی دیتا گرید به سطر بعدی برویم.

jaza_sa
پنج شنبه 07 شهریور 1387, 09:09 صبح
این کد ، شماره رکوردی که در حال حاضر Select شده رو برمیگرودنه

dvg.CurrentRow.Index
حالا میتونی برای اینکه ردیف بعدی انتخاب بشه از این کد استفاده کین

dgv.Rows[dgv.CurrentRow.Index + 1].Selected = true;
البته باید MultiSelect مقدار False داشته باشه تا دو ردیف انتخاب نشن

ammarkarimi
پنج شنبه 07 شهریور 1387, 13:14 عصر
سپاسگزار
من همین کد را برای (دکمه قبلی)نوشتم .با این تفاوت که +1رو -1 کردم ولی اررور داد.میشه دوباره راهنمایی کنید.

ammarkarimi
پنج شنبه 07 شهریور 1387, 15:29 عصر
با عرض پوزش کار من راه نیفتاد.
هر چند بار که کلیک می کنم فقط یکی می ره جلو
چه کار کنم فوری!؟!؟

bsng110
پنج شنبه 07 شهریور 1387, 20:56 عصر
هوالحکیم.
سلام.
من از دستور زیر استفاده می کنم و تا حالا هم هیچ مشکلی نداشته ام(در کد زیر در رویداد کلید ها تنظیم کرده ام که وقتی کاربر دکمه بالا را می زند، سطر قبلی جدول انتخاب شود و وقتی دکمه پایین را می زند، سطر بعدی جدول انتخاب شود):


case Keys.Up:
n = dataGridView1.Rows.Count;
if (n != 0)
{
i = dataGridView1.BindingContext[dataGridView1.DataSource].Position;
dataGridView1.BindingContext[dataGridView1.DataSource].Position = (i - 1 + n) % n;
}
return true;
case Keys.Down:
n = dataGridView1.Rows.Count;
if (n != 0)
{
i = dataGridView1.BindingContext[dataGridView1.DataSource].Position;
dataGridView1.BindingContext[dataGridView1.DataSource].Position = (i + 1) % n;
}
return true;

البته کد بالا به صورت چرخشی عمل می کند ولی اگه خواستید چرخشی عمل نکنید، یک مقایسه به فرمول های بالا اضافه می شود(که مبادا کاربر بخواهد سطر قبل از سطر اول را انتخاب کند و یا سطر بعد از سطر آخر) و همچنین قسمت های چرخشی (% دار) باید حذف شوند.
البته در جدول بالا، بنده منبع داده ای(data source) خود را از یک DataSet گرفته ام ولی چنانچه از dataset نیز استفاده نکرده اید(مثلاً خودتان به صورت دستی به سطر های جدول اضافه کرده اید)، با دستور مشابهی می توانید این عمل را انجام دهید. مثلاً من در این حالت، این کد را نوشتم:


case Keys.Up:
#region CursorUp
if (dataGridView1.RowCount == 0)
return true;
i = dataGridView1.CurrentRow.Index;
dataGridView1.CurrentCell = dataGridView1.Rows[(i - 1 + dataGridView1.RowCount) % dataGridView1.RowCount].Cells[0];
return true;
#endregion CursorUp
case Keys.Down:
#region CursorDown
if (dataGridView1.RowCount == 0)
return true;
i = dataGridView1.CurrentRow.Index;
dataGridView1.CurrentCell = dataGridView1.Rows[(i + 1) % dataGridView1.RowCount].Cells[0];
return true;
#endregion CursorDown

در ضمن کدهای بالا را در تابع ProcessCmdKey نوشته ام!
یا علی
خدانگهدارتان

m_1980
جمعه 08 شهریور 1387, 10:00 صبح
با استفاده از bindingnavigator و BindingSource به راحتی پیمایش انجام میشه


bindingSource1.DataSource = ds.Tables["Table"];
bindingNavigator1.BindingSource = bindingSource1;
dataGridView1.DataSource = bindingSource1;

ammarkarimi
جمعه 08 شهریور 1387, 10:48 صبح
آقا دمتون گرم کارم راه افتاد با راهنمایی شما عزیزان.سپاسگزارم

آقا فقط یه چیز دیگه چطور این تایپیک رو به جواب رسیده اعلام کنم.

sinpin
جمعه 08 شهریور 1387, 11:02 صبح
چطور این تایپیک رو به جواب رسیده اعلام کنم.
از منوي ابزار های تاپیک گزينه ي تایید پاسخ های ارسالی به عنوان راه حل را انتخاب كنيد.