rayson
یک شنبه 10 شهریور 1392, 19:58 عصر
سلام.
من با کد درون دیتا گرید برای هر سطر یک چک باکس تعریف کردم و میخوام زمانی که تیک انتخاب میشه و دکمه حذف زده بشود داده مورد نظر حذف شود ، البته یک چک باکس هم در بالا همه سطر ها وجود دارد که اگر زده شود تمام چک باکس ها انتخاب میشود .
کد مورد نظر به شکل زیر است اما خطا زیر را میدهد لطفا راهنمایی کنید.
با تشکر.
کد حذف درون دکمه :
List<int> ChkedRow = new List<int>();
DataRow dr;
for (int i = 0; i <= karkard_dgv_karkard.RowCount - 1 ; i++)
{
if (Convert.ToBoolean(karkard_dgv_karkard.Rows[i].Cells["chkcol"].Value) == true)
{
ChkedRow.Add(i);
}
}
foreach (int k in ChkedRow)
{
dr = dt.Rows[k];
dt.Rows[k].Delete();
}
کد نمایش و تغییرات چک باکس ها:
private void chkBoxChange(object sender, EventArgs e)
{
for (int k = 0; k <= karkard_dgv_karkard.RowCount - 1; k++)
{
this.karkard_dgv_karkard[0,k].Value = this.chkbox.Checked;
}
this.karkard_dgv_karkard.EndEdit();
}
void loadGrid()
{
karkard_dgv_karkard.AllowUserToAddRows = false;
karkard_dgv_karkard.Columns.Clear();
DataGridViewCheckBoxColumn colcb = new DataGridViewCheckBoxColumn();
colcb.Name = "chkcol";
colcb.HeaderText = "";
colcb.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
karkard_dgv_karkard.Columns.Add(colcb);
Rectangle rect = this.karkard_dgv_karkard.GetCellDisplayRectangle(0 , -1, true); //0 Column index -1(header row) is row index
chkbox.Size = new Size(18, 18);
rect.Offset(40,2);
chkbox.Location = rect.Location;
chkbox.CheckedChanged += chkBoxChange;
this.karkard_dgv_karkard.Controls.Add(chkbox);
karkard_dgv_karkard.DataSource = dt;
}
خطا و همچنین ستون های دیتا گرید. ( نکته ای که یادم رفت بگم این است که آی دی جدولم درون دیتا گرید نمایش داده نمیشود یعنی هنگام سلکت کردن فقط داده های مورد نیاز را از جدول فراخوانی کردم)
جدول:
http://www.uploadtak.com/images/8568_DgV.jpg
خطا:
http://www.uploadtak.com/images/s562_DgV1.jpg
من با کد درون دیتا گرید برای هر سطر یک چک باکس تعریف کردم و میخوام زمانی که تیک انتخاب میشه و دکمه حذف زده بشود داده مورد نظر حذف شود ، البته یک چک باکس هم در بالا همه سطر ها وجود دارد که اگر زده شود تمام چک باکس ها انتخاب میشود .
کد مورد نظر به شکل زیر است اما خطا زیر را میدهد لطفا راهنمایی کنید.
با تشکر.
کد حذف درون دکمه :
List<int> ChkedRow = new List<int>();
DataRow dr;
for (int i = 0; i <= karkard_dgv_karkard.RowCount - 1 ; i++)
{
if (Convert.ToBoolean(karkard_dgv_karkard.Rows[i].Cells["chkcol"].Value) == true)
{
ChkedRow.Add(i);
}
}
foreach (int k in ChkedRow)
{
dr = dt.Rows[k];
dt.Rows[k].Delete();
}
کد نمایش و تغییرات چک باکس ها:
private void chkBoxChange(object sender, EventArgs e)
{
for (int k = 0; k <= karkard_dgv_karkard.RowCount - 1; k++)
{
this.karkard_dgv_karkard[0,k].Value = this.chkbox.Checked;
}
this.karkard_dgv_karkard.EndEdit();
}
void loadGrid()
{
karkard_dgv_karkard.AllowUserToAddRows = false;
karkard_dgv_karkard.Columns.Clear();
DataGridViewCheckBoxColumn colcb = new DataGridViewCheckBoxColumn();
colcb.Name = "chkcol";
colcb.HeaderText = "";
colcb.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
karkard_dgv_karkard.Columns.Add(colcb);
Rectangle rect = this.karkard_dgv_karkard.GetCellDisplayRectangle(0 , -1, true); //0 Column index -1(header row) is row index
chkbox.Size = new Size(18, 18);
rect.Offset(40,2);
chkbox.Location = rect.Location;
chkbox.CheckedChanged += chkBoxChange;
this.karkard_dgv_karkard.Controls.Add(chkbox);
karkard_dgv_karkard.DataSource = dt;
}
خطا و همچنین ستون های دیتا گرید. ( نکته ای که یادم رفت بگم این است که آی دی جدولم درون دیتا گرید نمایش داده نمیشود یعنی هنگام سلکت کردن فقط داده های مورد نیاز را از جدول فراخوانی کردم)
جدول:
http://www.uploadtak.com/images/8568_DgV.jpg
خطا:
http://www.uploadtak.com/images/s562_DgV1.jpg