PDA

View Full Version : پاک کردن اطلاعات داخل تکس باکس ها با غیر فعال کردن چک باکس از طذیق دیتا گریدویو



safari_m4
پنج شنبه 20 آذر 1404, 12:00 عصر
سلام دوستان در سی شارپ ویندوز فرم من یک دیتاگریدویو دارم که ستون اول آن چک باکس می باشد حالا من می خوام با هر بار انتخاب یا فعال کردن هر یک از چک باکسها همزمان اطلاعات ردیف انتخاب شده گریدویو مربوط به آن چک باکس داخل تکس باکسهای مربوطه قرار گیرند و با هر بار غیر فعال کردن همان چک باکس همزمان اطلاعات داخل تکس باکس ها پاک شوند . ضمنا در کدام رویداد گریدویو باید این کدها را نوشت . با تشکر و سپاس

ROSTAM2
پنج شنبه 20 آذر 1404, 13:02 عصر
برای کاری که می‌خواهید انجام دهید، باید روی رویداد CellContentClick یا CellValueChanged دیتاگرایدویو کار کنید. تفاوت این دو رویداد این است که:


CellContentClick: وقتی روی سلول (مثلاً چک‌باکس) کلیک می‌کنید، این رویداد اجرا می‌شود.
CellValueChanged: وقتی مقدار سلول تغییر کند (چک‌باکس تیک بخورد یا برداشته شود)، این رویداد اجرا می‌شود.

معمولاً برای چک‌باکس‌ها بهتر است از CellContentClick استفاده کنید و بعد از تغییر وضعیت، مقدار سلول را بررسی کنید.
نمونه کد (C#‎‎‎‎‎‎ WinForms)

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
// بررسی اینکه ستون چک‌باکس است
if (e.ColumnIndex == 0 && e.RowIndex >= 0)
{
DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)dataGridView1.Rows[e.RowIndex].Cells[0];
bool isChecked = (chk.Value != null && (bool)chk.Value);

if (isChecked)
{
// وقتی چک‌باکس فعال شد، اطلاعات ردیف را داخل تکس‌باکس‌ها قرار بده
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
// همینطور برای بقیه تکس‌باکس‌ها...
}
else
{
// وقتی چک‌باکس غیر فعال شد، تکس‌باکس‌ها را پاک کن
textBox1.Clear();
textBox2.Clear();
// ...
}
}
}
نکات مهم



ستون اول گریدویو باید از نوع DataGridViewCheckBoxColumn باشد.
اگر می‌خواهید تغییر مقدار بعد از کلیک اعمال شود، گاهی نیاز است از رویداد CurrentCellDirtyStateChanged استفاده کنید تا تغییر مقدار چک‌باکس سریع ثبت شود:

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorCont exts.Commit);
}
}
این کد باعث می‌شود وقتی روی چک‌باکس کلیک می‌کنید، مقدار آن بلافاصله تغییر کند و رویداد CellContentClick یا CellValueChanged اجرا شود.

Copilot

safari_m4
پنج شنبه 20 آذر 1404, 14:08 عصر
با تشکر و سپاس فراوان عالی بود