PDA

View Full Version : سوال: مشکل در ایجاد یک Datagridview که Column هایی با پروپرتی های جدید داره



pooya1072
جمعه 13 اردیبهشت 1392, 20:32 عصر
سلام دوستان
من می خوام یک دیتاگریدویو بسازم که ستون های اون به عنوان مثال یک پروپرتی جدید مثلا به اسم TestProperty داشته باشه . من چیزی رو که در نظر داشتم انجام دادم ولی به مشکل برخوردم . جهت اطلاع بگم که میدونم روش های دیگه ای برای انجام این کار هست . ولی بالاجبار باید از این روش انجام بدم .مراحلی که انجام دادم به شرح زیره :
1- ساخت کلاسی جدید از DatagridviewColumns :

public class MyDatagridviewColumn : DataGridViewColumn
{
string MName;
public string MyNewProperty{
get { return MName; }
set { MName = value; }
}
}

2- ایجاد کلاسی از Datagridview که پروپرتی Columns اون از نوع MyDatagridviewColumns هست :

public class MyDatagriedview : DataGridView
{

MyDatagridviewColumn C1;

DataGridViewColumnCollection CC1;
public new MyDatagridviewColumn Columns {
get { return C1; }
set { C1 = value; }
}
public new DataGridViewColumnCollection Columns {
get { return CC1; }
set { CC1 = value; }
}
public void Initialize()
{
C1 = new MyDatagridviewColumn();
CC1 = new DataGridViewColumnCollection(this);
}
public MyDatagriedview()
{
Initialize();
}
}

3- اضافه کردن این کلاس به فرم :

public class Form1
{
Form1_Load(System.Object sender, System.EventArgs e)
{
MyDatagriedview mdgv = new MyDatagriedview();
mdgv.Columns.Add("c1", "c2");
this.Controls.Add(mdgv);
}
}

مشکل اینه که دیتاگرید ویو به فرم اضافه میشه ولی هیچ ستونی به اون اضافه نمیشه .
اگه ممکنه یک بررسی کنید ببینید مشکل چیه و اصلا این کار به این روش امکان پذیره یا نه ..
با تشکر از دوستان

Mahmoud.Afrad
جمعه 13 اردیبهشت 1392, 22:00 عصر
فکر نمیکنم نیازی به ایجاد کلاسی جدید از دیتاگریدویو باشه. بعد از اینکه ستون جدید را ارث بری کردید یک بار پروژه را دیباگ کنید.

public class MyDatagridviewColumn : DataGridViewColumn
{
string MName;
public string MyNewProperty
{
get { return MName; }
set { MName = value; }
}

public MyDatagridviewColumn()
{
this.CellTemplate = new DataGridViewTextBoxCell();
}
}

یک دیتاگریدویو معمولی به فرم اضافه کنید و از طریق راست کلیک اقدام به افزودن ستون کنید. متوجه میشید که نوع ستون جدید هم در لیست انواع ستون ها هست. با کدنویسی هم طبق معمول میتونید ستون جدیدی به گریدویو اضافه کنید:

MyDatagridviewColumn mdgvc = new MyDatagridviewColumn();
mdgvc.MyNewProperty = "??????";
dataGridView1.Columns.Add(mdgvc);

pooya1072
جمعه 13 اردیبهشت 1392, 22:22 عصر
ممنون دوست عزیز
این دیتاگریدویو قراره که توسط دستور DataAdapter.Fill پر بشه . با این حساب باز هم میشه از روش شما استفاده کرد ؟
من می خوام کل ستون هایی که توسط دیتا آداپتور پر میشن دارای این property باشن.

Mahmoud.Afrad
جمعه 13 اردیبهشت 1392, 23:20 عصر
بله. میتونید به تعداد مورد نیاز ستون از این نوع به گریدویو اضافه کنید. بعد دیتاتیبل پر شده رو به دیتاسورس وصل کنید. ستونها رو از طریق DataPropertyName میتونید به ستون دیتاتیبل وصل کنید.