PDA

View Full Version : فراخوانی ID یک تیبل و گذاشتن در یک متغیر در برنامه نویسی چند لایه



soleimani.em
شنبه 09 فروردین 1393, 09:45 صبح
با سلام به همه دوستان عزیز
من یک پروژه برنامه نویسی چند لایه رو شروع کردم ولی یه سری مشکلات دارم که یکیشون اینه.
دو تا جدول تو بانک SQl به اسم GroupActivity با فیلدهای GroupID,GroupName و یه جدول دیگه دارم به اسم Contact با فیلدهای Name,Family,GroupID حالا تو یه Combobox گروپ نیم رو نمایش میدم و میخام وقتی کاربر از Combobox انتخاب کرد اسم گروه رو GroupID اون تو یه متغیر int ذخیره بشه و همونو تو جدول Contact ذخیره کنم.

کد لایه UI

private void Fo_InfoContact_Load(object sender, EventArgs e)
{
Contact.GetGroupname(CGroup);
}

کد لایه BLL
public void GetGroupname(ComboBox combo)
{
combo.DisplayMember = "GroupName";
combo.DataSource = icta.GetGroupName();
}

کد لایه DAL

public DataTable GetGroupName()
{
DataSet ds = ExecuteDataset(System.Data.CommandType.Text, "Select GroupName,Groupid from ActivityGroup", null);
return ds.Tables[0];
}

دوستان لطفاً منو راهنمایی کنید
خیلی ممنون

siroos_friend
شنبه 09 فروردین 1393, 11:35 صبح
سلام دوست عزیز برای این کار از خاصیت ValueMember در ComboBox استفاده کنید. براتون یه نمونه کد گذاشتم برای مثال:

public class Person
{
public int id { get; set; }
public string name { get; set; }
}

private void Form1_Load(object sender, EventArgs e)
{
var lstPerson = new List<Person>
{
new Person{id =1,name = "Person1"},
new Person{id =2,name = "Person2"}
};
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";
comboBox1.DataSource = lstPerson;
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var x = comboBox1.SelectedValue;
}





وقتی که ComboBox مقدارش عوض میشه ، Value مربوط به اون Text که انتخاب شده در x ذخیره میشه.
کافیه تو کد خودتون combo.ValueMember= Groupid بذارید و ازش استفاده کنید.
امیدوارم به دردتون خورده باشه.




با سلام به همه دوستان عزیز
من یک پروژه برنامه نویسی چند لایه رو شروع کردم ولی یه سری مشکلات دارم که یکیشون اینه.
دو تا جدول تو بانک SQl به اسم GroupActivity با فیلدهای GroupID,GroupName و یه جدول دیگه دارم به اسم Contact با فیلدهای Name,Family,GroupID حالا تو یه Combobox گروپ نیم رو نمایش میدم و میخام وقتی کاربر از Combobox انتخاب کرد اسم گروه رو GroupID اون تو یه متغیر int ذخیره بشه و همونو تو جدول Contact ذخیره کنم.

کد لایه UI

private void Fo_InfoContact_Load(object sender, EventArgs e)
{
Contact.GetGroupname(CGroup);
}

کد لایه BLL
public void GetGroupname(ComboBox combo)
{
combo.DisplayMember = "GroupName";
combo.DataSource = icta.GetGroupName();
}

کد لایه DAL

public DataTable GetGroupName()
{
DataSet ds = ExecuteDataset(System.Data.CommandType.Text, "Select GroupName,Groupid from ActivityGroup", null);
return ds.Tables[0];
}

دوستان لطفاً منو راهنمایی کنید
خیلی ممنون

soleimani.em
شنبه 09 فروردین 1393, 13:29 عصر
سلام
ممنون از بابت راهنمایی
این قسمت را میتوانید توضیح دهید/ یا کدهارو برام اصلاح کنید ممنون میشم.

var lstPerson = newList<Person>
{
new Person{id =1,name = "Person1"},
new Person{id =2,name = "Person2"}
}

Mahmoud.Afrad
شنبه 09 فروردین 1393, 15:25 عصر
با سلام به همه دوستان عزیز
من یک پروژه برنامه نویسی چند لایه رو شروع کردم ولی یه سری مشکلات دارم که یکیشون اینه.
دو تا جدول تو بانک SQl به اسم GroupActivity با فیلدهای GroupID,GroupName و یه جدول دیگه دارم به اسم Contact با فیلدهای Name,Family,GroupID حالا تو یه Combobox گروپ نیم رو نمایش میدم و میخام وقتی کاربر از Combobox انتخاب کرد اسم گروه رو GroupID اون تو یه متغیر int ذخیره بشه و همونو تو جدول Contact ذخیره کنم.

کد لایه UI

private void Fo_InfoContact_Load(object sender, EventArgs e)
{
Contact.GetGroupname(CGroup);
}

کد لایه BLL
public void GetGroupname(ComboBox combo)
{
combo.DisplayMember = "GroupName";
combo.DataSource = icta.GetGroupName();
}

کد لایه DAL

public DataTable GetGroupName()
{
DataSet ds = ExecuteDataset(System.Data.CommandType.Text, "Select GroupName,Groupid from ActivityGroup", null);
return ds.Tables[0];
}

دوستان لطفاً منو راهنمایی کنید
خیلی ممنون
لایه پایین تر نبایست به اجزای لایه بالاتر دسترسی داشته باشه یعنی لایه bll نباید به کمبوباکس لایه ui دسترسی پیدا کنه. همچنین لایه dal.

public DataTable GetGroupName(System.Data.CommandType cmdType , string sqlCommand , ... param3)
{
DataSet ds = ExecuteDataset(cmdType, sqlCommand , param3);
return ds.Tables[0];
}



public DataTable GetGroupname()
{
return icta.GetGroupName(System.Data.CommandType.Text, "Select GroupName,Groupid from ActivityGroup" , null);
}



private void Fo_InfoContact_Load(object sender, EventArgs e)
{
CGroup.DisplayMember = "GroupName";
CGroup.ValueMember = "Groupid";
CGroup.DataSource = Contact.GetGroupname();
}


در رویدادی مثل selectedvaluechanged کمبو میتونی selectedvalue همان id انتخاب شده است که میتونی به int تبدیل کنی.

siroos_friend
شنبه 09 فروردین 1393, 15:32 عصر
این قسمت یه سری داده مجازی برای تست داخل یه لیست قرار میده و اون رو به Combo بایند میکنه. (به جای Select که تو کدت داری من اینو واسه تست گذاشتم)

شما باید یه خط به کدت اضافه کنی combo.ValueMember = "groupid" .
با این کار combo علاوه بر اسم گروهها id اون ها رو هم تو خودش نگه میداره.


سلام
ممنون از بابت راهنمایی
این قسمت را میتوانید توضیح دهید/ یا کدهارو برام اصلاح کنید ممنون میشم.

var lstPerson = newList<Person>
{
new Person{id =1,name = "Person1"},
new Person{id =2,name = "Person2"}
}

soleimani.em
شنبه 09 فروردین 1393, 16:59 عصر
لایه پایین تر نبایست به اجزای لایه بالاتر دسترسی داشته باشه یعنی لایه bll نباید به کمبوباکس لایه ui دسترسی پیدا کنه. همچنین لایه dal.

public DataTable GetGroupName(System.Data.CommandType cmdType , string sqlCommand , ... param3)
{
DataSet ds = ExecuteDataset(cmdType, sqlCommand , param3);
return ds.Tables[0];
}



public DataTable GetGroupname()
{
return icta.GetGroupName(System.Data.CommandType.Text, "Select GroupName,Groupid from ActivityGroup" , null);
}



private void Fo_InfoContact_Load(object sender, EventArgs e)
{
CGroup.DisplayMember = "GroupName";
CGroup.ValueMember = "Groupid";
CGroup.DataSource = Contact.GetGroupname();
}


در رویدادی مثل selectedvaluechanged کمبو میتونی selectedvalue همان id انتخاب شده است که میتونی به int تبدیل کنی.

از راهنمایی شما و آقای siroos_friend (http://barnamenevis.org/member.php?186305-siroos_friend) فوق العاده متشکرم. مشکلم با Value حل شد.
فقط لطف کنید بیشتر برام توضیح بدین در مورد لایه بندی ها و لطف کنید بگید که استفاده از Stored Procedured بهتره یا Ado net من خودم از Stored Procedured استفاده کردم چون همینو بلد بودم ولی بنظر میاد استفاده از Ado net بهتر باشه چون همه کدها تو نرم افزار نوشته میشه و بانک زیاد درگیر نیست.

Mahmoud.Afrad
شنبه 09 فروردین 1393, 17:34 عصر
شما برای اجرای Stored Procedured میبایست از یکی از تکنولوژی ها مثل ado.net استفاده کنید. پس سوالتون اشتباست.
البته میتونید در مورد مزایای استفاده از SP جستجو کنید.

soleimani.em
شنبه 09 فروردین 1393, 20:12 عصر
منظورم اینه که کد نویسی تو فرم یا کلاس ها باشه نه بانک اطلاعاتی.