PDA

View Full Version : مبتدی: ایجاد منوی راست کلیک برای datagridview



erfangolbahari
شنبه 19 دی 1394, 09:06 صبح
با سلام خدمت اساتید محترم
من میخوام از یک db یک سری اطلاعات بگیرم تویه dgv نشون بدم و با امکان منوی راست کلیک روش تغیرات ایجاد کنم کلی اموزش توی اینترنت بود ولی همشون یک مشکل داشتن اونم این بود که
باید توی رویداد (CellMouseUp)قرار داده میشدند و نمیگفتن چطوری این رویداد رو ایجاد کنم ممنون میشم اگه کمکم کنید:گریه::گریه:

amin8505
شنبه 19 دی 1394, 13:37 عصر
شما باید دیتا گرید ویو را به حالت انتخاب در بیارید و در قسمت Properites 'گزینه Event انتخاب کنید.
اونجا می تونید با کلیک روی رویدادی که می خواهید اون رو ایجاد کنید.

ghasem110deh
شنبه 19 دی 1394, 15:36 عصر
سلام
یه contextMenuStrip1 به فرم تون اضافه کنید ... بعد همونطور که دوست مون گفتن ، دیتاگریدویو رو انتخاب کنید و از قسمت properties گزینه
CellMouseUp رو دابل کلید تا وارد محیط کد نویسی بشین !
یه رویداد مثل باتون کلیک میشه ، و این کد رو اضافه کنید :


private int rowIndex = 0;
private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.dataGridView1.Rows[e.RowIndex].Selected = true;
this.rowIndex = e.RowIndex;
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[e.RowIndex].Cells[1];
this.contextMenuStrip1.Show(this.dataGridView1, e.Location);
contextMenuStrip1.Show(Cursor.Position);
}
}


خط اول یه متغیر هستش که ایندکس سطری از گریدویو که روش کلیک شده رو توی خودش ذخیره میکنه !
خط دوم دوم که همون رویداد
CellMouseUp هستش
خط سوم کاملا مشخص دیگه ... میگه اگر کلید سمت راست موس فشرده شد دستورات زیر اجرا بشه
شماره سطری که روش کلیک راست شده گرفته و در متغیر بالا ریخته میشه
و در ادامه میگه حالا منوی کلیک راست رو همین موقعیت (همون جایی که موس کلیک راست شده) به نمایش دربیاد

و حالا باید کار هایی که لازم دارین توی گزینه مورد نظرتون از منوی کلیک راست انجام بدین مثلا حذف سطر از بانک !
وقتی روی گزینه مورد نظر از منو کلیک کنید وارد همچین رویدادی میشین :


private void حذفسطرToolStripMenuItem_Click(object sender, EventArgs e)



و دستورات رو توی این رویداد مینویسید :


int row1 = Convert.ToInt32(dataGridView1.CurrentRow.Cells["Id"].Value);
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=AnbarDB;Integrated Security=True");
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = "Delete From TAmval WHERE Id=@i";
com.Parameters.AddWithValue("@i", row1);
con.Open();
com.ExecuteNonQuery();
if (!this.dataGridView1.Rows[this.rowIndex].IsNewRow)
{
this.dataGridView1.Rows.RemoveAt(this.rowIndex);
}



خط اول یه متغیر حاوی مقدار ستون Id از سطری که انتخاب شده رو توی خودش ذخیره میکنه !
و دستورات حذف با ado
و اون شرط آخر که میگه همون سطری که روش کلیک شده (که شمارش توی متغیر rowIndex وجود داره
) از سطر های دیتاگریدویو هم حذف بشه (که این فقط بدرد حذف میخوره)

یا علی !

erfangolbahari
دوشنبه 21 دی 1394, 10:50 صبح
خیلی ممنون از راه نمایی تون

nem3sis
پنج شنبه 07 آذر 1398, 00:32 صبح
ببخشید تو کامپوننت تلریک رویداد
CellMouseUp وجود نداره میشه بگید رویداد مشابهش کدومه ؟

رامین مرادی
پنج شنبه 07 آذر 1398, 09:33 صبح
ببخشید تو کامپوننت تلریک رویداد
CellMouseUp وجود نداره میشه بگید رویداد مشابهش کدومه ؟


برای تلریک باید از خود radContextMenu استفاده کنید .
برای بدست آوردن مقدار سطر هم از کد زیر میتونید استفاده کنید



private void dgv1_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e)
{
GridDataCellElement dataCellElement = e.ContextMenuProvider as GridDataCellElement;
if (dataCellElement != null)
{
GridViewRowInfo clickedRow = dataCellElement.RowInfo;
RowIndex= clickedRow.Index;
if (RowIndex >= 0)
{
e.ContextMenu = radContextMenu1.DropDown;

Id = int.Parse(dgv1.Rows[RowIndex].Cells["Id"].Value.ToString());
}
}
else
{
e.Cancel = true;
}
}

nem3sis
پنج شنبه 07 آذر 1398, 21:43 عصر
برای تلریک باید از خود radContextMenu استفاده کنید .
برای بدست آوردن مقدار سطر هم از کد زیر میتونید استفاده کنید



private void dgv1_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e)
{
GridDataCellElement dataCellElement = e.ContextMenuProvider as GridDataCellElement;
if (dataCellElement != null)
{
GridViewRowInfo clickedRow = dataCellElement.RowInfo;
RowIndex= clickedRow.Index;
if (RowIndex >= 0)
{
e.ContextMenu = radContextMenu1.DropDown;

Id = int.Parse(dgv1.Rows[RowIndex].Cells["Id"].Value.ToString());
}
}
else
{
e.Cancel = true;
}
}







دمت گرم کیشی مشکلم حل شد 🖤

رامین مرادی
شنبه 09 آذر 1398, 10:22 صبح
اینم برای اینکه منوهاتو تعریف کنی و بتونی رو سطرها عملیات انجام بدی




public Form1()
{
//برای هر منوی تعریف شده رویداد کلیک اضافه میکنیم
radContextMenu1.Items["mnuEdit"].Click += new EventHandler(mnuEdit_Click);
radContextMenu1.Items["mnuDelete"].Click += new EventHandler(mnuDelete_Click);

}
// متغییری برای نگه داری سطر کلیک شده
int RowIndex=-1;



//رویداد کلیک برای ویرایش
private void mnuEdit_Click(object sender, EventArgs e)
{
//برای این >=0 میزاریم چون وقتی کاربر رو عنوان کلیک میکنه مقدار -1 ارسال میشه و برنامه با خطا مواجه میشه
if (RowIndex >= 0)
{
//دستورات
// هم شماره سطر کلیک شده هستRowIndex
// برا گرفتن مقدار سطر میتونید به شکل زیر عمل کنید
//messagebox.Show(dgv1.Rows[RowIndex].Cells["Name"].Value.ToString());
}
}
//رویداد کلیک برای حذف
private void mnuDelete_Click(object sender, EventArgs e)
{

if (RowIndex >= 0)
{
//دستورات
// هم شماره سطر کلیک شده هستRowIndex
// برا گرفتن مقدار سطر میتونید به شکل زیر عمل کنید
//messagebox.Show(dgv1.Rows[RowIndex].Cells["Name"].Value.ToString());

}
}

// از رویدکد های گریدتون این رویداد رو دابل کلیک کنید اضافه میشه به کدهاتون و کدهای داخلیش رو کپی کنید
private void dgv1_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e)
{

GridDataCellElement dataCellElement = e.ContextMenuProvider as GridDataCellElement;
if (dataCellElement != null)
{
GridViewRowInfo clickedRow = dataCellElement.RowInfo;
//گرفتن شماره سطر انتخاب شده
RowIndex= clickedRow.Index;
//برای این >=0 میزاریم چون وقتی کاربر رو عنوان کلیک میکنه مقدار -1 ارسال میشه و برنامه با خطا مواجه میشه
if (RowIndex >= 0)
{
e.ContextMenu = radContextMenu1.DropDown;
}
}
else
{
e.Cancel = true;
}
}