PDA

View Full Version : سوال: تیک زدن گروهی چک باکس های درون چند گریدویو که درون TabPage قرار دارند



veniz2008
یک شنبه 26 شهریور 1391, 11:52 صبح
سلام. من در فرمم یک تب کنترل دارم که شامل چند تب پیج هست. درون تب پیج دوم چند گریدویو دارم که در هر گریدویو یک ستون از نوع چک باکس وجود داره. یه دکمه گذاشتم که کاربر با کلیک دکمه، تمامی رکوردهای درون این چند گریدویو رو تیک بزنه. من از کد زیر استفاده میکنم ولی هیچ عملی انجام نمیده. اگر یک چک باکس روی فرم بذارم (درون تب پیج نباشه). کد به درستی کار میکنه. مشکل کار کجاست؟
متدی که چک باکس ها رو تیک میزنم :

public static void CheckAllRecord(System.Windows.Forms.Control parent)
{
foreach (System.Windows.Forms.Control ctrControl in parent.Controls)
{
if (object.ReferenceEquals(ctrControl.GetType(), typeof(System.Windows.Forms.CheckBox)))
{
((System.Windows.Forms.CheckBox)ctrControl).Checke d = true;
}
}
}
درون دکمه این متد رو بصورت زیر صدا میزنم :

CheckAllRecord(this);

به جای this خیلی چیزهای دیگه ای مثل نام تب کنترل یا نام تب پیج یا نام گرید رو هم نوشتم ولی جواب نداد.

Farshid007
یک شنبه 26 شهریور 1391, 11:59 صبح
باید یه فرو ایچ هم بندازی که بره تو صفحات تب کنترل
گرفتی چی می گم؟
قبلا هم یکی همچین مشگلی داشت

veniz2008
یک شنبه 26 شهریور 1391, 12:12 عصر
از لحاظ گرفتن که گرفتم ولی چطوری باید پیاده سازی بشه؟ کدش رو نمیدونم. اگه لطف کنی بزاری ممنون میشم.

Farshid007
یک شنبه 26 شهریور 1391, 12:20 عصر
foreach (TabPage T in tabControl1.TabPages)
{
foreach (Control C in T.Controls)
{
if (C.GetType() == typeof(CheckBox))
{
(C as CheckBox).Checked = true;
}
}
}

Farshid007
یک شنبه 26 شهریور 1391, 12:21 عصر
اخه ستاره هات زیادن گفتم خودت می نویسی

veniz2008
یک شنبه 26 شهریور 1391, 12:42 عصر
اخه ستاره هات زیادن گفتم خودت می نویسی
نصف این ستاره ها رو از مبحث گریدویو گرفتم. اولین باره که از foreach استفاده کردم!. بازم کار نکرد. کدم الان بصورت زیره:

public void CheckAllRecord(System.Windows.Forms.Control parent)
{
foreach (System.Windows.Forms.Control ctrControl in parent.Controls)
{
foreach (TabPage T in TabCtrlStudent.TabPages)
{
foreach (Control C in T.Controls)
{
if (C.GetType() == typeof(CheckBox))
{
(C as CheckBox).Checked = true;
}
}
}
}
}

Farshid007
یک شنبه 26 شهریور 1391, 12:52 عصر
اینجوری که کلا اشتباه
از کد من استفاده کن(فقط)

veniz2008
یک شنبه 26 شهریور 1391, 12:55 عصر
اینجوری که کلا اشتباه
از کد من استفاده کن(فقط)
کد خودم رو پاک کردم و کد شما رو عینا قرار دادم. بازم هیچ کاری انجام نمیده. اینم کد :

public void CheckAllRecord(System.Windows.Forms.Control parent)
{
foreach (TabPage T in TabCtrlStudent.TabPages)
{
foreach (Control C in T.Controls)
{
if (C.GetType() == typeof(CheckBox))
{
(C as CheckBox).Checked = true;
}
}
}
}

Farshid007
یک شنبه 26 شهریور 1391, 13:02 عصر
من خودم چند تا چک باکس گذاشتم تو قسمت های مختلف tabControl
زدم همشون چک شدن!

گفتی چک باکس ها تو دیتا گرید ویو هستن!؟

veniz2008
یک شنبه 26 شهریور 1391, 13:06 عصر
من خودم چند تا چک باکس گذاشتم تو قسمت های مختلف tabControl
زدم همشون چک شدن!

گفتی چک باکس ها تو دیتا گرید ویو هستن!؟
آره. چند تا گرید هستن که هر گرید یه ستون از نوع چک باکس داره که میخوام با زدن این دکمه همه چک باکس ها تیک بخورن.

Mahmoud.Afrad
یک شنبه 26 شهریور 1391, 14:00 عصر
اگر نام ستون و یا اندیس ستون چک باکس در همه گریدویوها یکسان هست به اینصورت بنویس
private void CheckAllRecord(TabControl tabControl)
{
foreach (TabPage tabPage in tabControl.TabPages)
{
foreach (Control control in tabPage.Controls)
{
if (control is DataGridView)
{
DataGridView dgv = control as DataGridView;
foreach (DataGridViewRow dgvRow in dgv.Rows)
{
dgvRow.Cells["نام ستون یا اندیس"].Value = true;

}
}
}
}
}


ولی اگر اندیس ها و یا نام ها یکسان نیست به صورت زیر میتونی هر ستون چک باکسی را در گریدویوها تیک بزنی
private void CheckAllRecord(TabControl tabControl)
{
foreach (TabPage tabPage in tabControl.TabPages)
{
foreach (Control control in tabPage.Controls)
{
if (control is DataGridView)
{
DataGridView dgv = control as DataGridView;
foreach (DataGridViewRow dgvRow in dgv.Rows)
{
foreach (DataGridViewColumn dgvColumn in dgv.Columns)
{
if (dgvColumn is DataGridViewCheckBoxColumn)
{
dgvRow.Cells[dgvColumn.Name].Value = true;
}
}
}
}
}
}
}

به اینصورت هم فراخوانی کنید
CheckAllRecord(this.tabControl1);