PDA

View Full Version : سوال: گریدویو > راست کلیک در سطور گریدویو



dr_ghezavat
جمعه 06 شهریور 1388, 13:05 عصر
سلام و آرزوی قبولی طاعات و عبادات همگی . دوستان چطور میشه در سطرهای گرید ویو راست کلیک گذاشت . بطوری که بشه با راست کلیک کردن روی یکی از سطور و انتخاب گزینه ی "ویرایش" از منو ، و کارهای از این قبیل عملیات اختصاصی روی سطرها انجام داد . نه اینکه فله ای باشه . در واقع میخوام منویی که در فضای خالی گریدویو نمایش داده میشه با اونی که با راست کلیک روی سطرها نمایش داده میشه فرق کنه .

mir555
جمعه 06 شهریور 1388, 18:46 عصر
برای اینکار به فرمت یک contextMenuStrip اضافه کن بعدش منوی خودتو تو این پیاده سازی کن و در گرید خودت contextMenuStrip برابر اسم منوی کن که اول زیاد کردیم حالا همه چی حله اجرا کن خروجی ببین اگه بازم مشکل داشتی بگو مثال بزارم

shahab_ss
جمعه 06 شهریور 1388, 19:01 عصر
جستجو ،جستجو،جستجو !!!

http://barnamenevis.org/forum/showthread.php?t=159319

dr_ghezavat
شنبه 07 شهریور 1388, 00:50 صبح
شهاب جان اینی که گفتی خوبه ولی تمایزی بین منو ی باز شده در فضای خالی گرید ویو با منوی سطر ها قائل نمیشه . در واقع دو تا منو برای گرید ویو میخوام .

dr_ghezavat
شنبه 07 شهریور 1388, 02:18 صبح
این کد شماست .




private void GridV1_MouseDown(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hitTestInfo;
if (e.Button == MouseButtons.Right)
{
hitTestInfo = GridV1.HitTest(e.X, e.Y);
if (hitTestInfo.Type == DataGridViewHitTestType.Cell)
{
GridV1.Rows[hitTestInfo.RowIndex].Selected = true;
}
}
}



ضمنا این تیکه کد هم کار نمیکنه و همه ی سلولها انتخاب شده میمونن. یا اینکه من نمیدونم کجا باید بنویسمش . من تو بلاک ایف اول نوشتمش :


GridView.SelectedIndex= null;

dr_ghezavat
شنبه 07 شهریور 1388, 02:33 صبح
کسی زحمت حل این مسأله رو نمیکشه ؟

dr_ghezavat
شنبه 07 شهریور 1388, 11:26 صبح
فقط میخوام بدونم چی بنویسم که در صورت راست کلیک در قسمت خالی گرید ویو منویی باز نشه . فکر نکنم برای کهنه کار های سی# زیاد سخت باشه .

shahab_ss
شنبه 07 شهریور 1388, 11:58 صبح
دوست عزیز ، میتونید قبل از باز شدن منو چک کنید که حتماً یک سطر انتخاب شده باشه.

dr_ghezavat
شنبه 07 شهریور 1388, 12:32 عصر
مثلا اینطوری؟



if (dataGridView1.SelectedRows.Count==1)


بعد اگه این شرط برقرار نشد چه اتفاقی بیفته ؟

shahab_ss
شنبه 07 شهریور 1388, 13:02 عصر
بله ،
ویا به این صورت :

grd.CurrentRow != null

dr_ghezavat
شنبه 07 شهریور 1388, 13:21 عصر
اما این حالیش نیست . در صورت برقرار نبودن شرط چه اتفاقی بیفته ؟ مثلا کانتکس منو مخفی بشه ؟ یا ویزیبلش فالس بشه ؟ این دوتایی که گفتم عمل نمیکنن .

dr_ghezavat
یک شنبه 08 شهریور 1388, 12:13 عصر
یافتم !!!



private void dataGridView1_khosusi_MouseDown(object sender, MouseEventArgs e)
{
dataGridView1_khosusi.ClearSelection();


if (dataGridView1_khosusi.CurrentRow!=null)
{
DataGridView.HitTestInfo myhitTestInfo;

if (e.Button == MouseButtons.Right)
{


myhitTestInfo = dataGridView1_khosusi.HitTest(e.X, e.Y);
if (myhitTestInfo.Type == DataGridViewHitTestType.Cell)
{
contextMenuStrip2.Show(dataGridView1_khosusi, new Point(e.X, e.Y));
dataGridView1_khosusi.Rows[myhitTestInfo.RowIndex].Selected = true;
}

else

dataGridView1_khosusi.ClearSelection();
}
}
}

debugsg
دوشنبه 24 مرداد 1390, 01:23 صبح
این یک راه ساده تری هم دارد:


dataGridView1_khosusi.ClearSelection();
if (e.Button == MouseButtons.Right) {
dataGridView1_khosusi.Rows[e.RowIndex].Selected = true;
contextMenuStrip2.Show(dataGridView1_khosusi, new Point(e.X, e.Y));


}

faravaghi
دوشنبه 24 مرداد 1390, 03:08 صبح
با سلام.

چطور ميشه با كليك راست موس روي DataGridView، سطري رو كه روش راست كليك شده انتخاب كرد؟

سلام عزيز، وقتي داري DataGridView رو پر مي کني مثلا همانند دستورات زير بيا از BindingSource استفاده کن:
BindingSource Bs = new BindingSource();
Bs.DataSource = SqlCommand("SELECT * FROM Table_Name");
DataGridView1.DataSource = Bs;

البته خدمت سروران عزيز عرض کنم تابع SqlCommand که پارامتر ورودي اون يک دستور SQL است،دست سازه و کارش اينه که دستور SQL رو ميگيره و خروجي يک DataTable برمي گردونه.
اينم بگم BindingSource که تعريف ميکنيد بايد سراسري باشه. حالا تو رويداد MouseDown گريدويو تابع زير رو بنويسد:
private void SelectRow(object sender, MouseEventArgs e)
{
try
{
Bs.Position = DataGridView1.HitTest(e.X, e.Y).RowIndex;
}
catch { }
}
بعدش يه ContextMenuStrip تعريف کنيد هرچي منو داريد توش بذاريد و در پارامتر ContextMenuStrip گريدويو اسم همين منو رو قرار بدهيد. اگه خواستيد که در صورت خالي بودن گريدويو منو باز نشه يا غير فعال بشه يا هر کاري بريد اين بلا رو روي ContextMenuStrip در بياريد. که اينم اينجوريه که تو رويداد Opening منو اين کد رو مي نويسيد:(من يه ContextMenuStrip با نام Menu تعريف کردم و داخلش منوهاي مختلف گذاشتم.)
private void CheckIsRow(object sender, CancelEventArgs e)
{
try
{
if (DataGridView1.Rows.Count <= 0)
Menu.Enabled = false;
else
{
Menu.Enabled = true;
if (Convert.ToInt32(DataGridView1.CurrentRow.Cells["DgStatus"].Value)==1)
{
StatusTSM.Image = Properties.Resources.status_busy;
}
else if (Convert.ToInt32(DataGridView1.CurrentRow.Cells["DgStatus"].Value) == 0)
{
StatusTSM.Image = Properties.Resources.status_Nobusy;
}
}
}
catch { }
}