PDA

View Full Version : سوال: پر کردن datagridview با استفاده از کلاس



negar442
یک شنبه 29 فروردین 1395, 17:52 عصر
public class Customer
{
public Customer()
{
this.CustPerson = new Person();
}
public int id { get; set; }
public Person CustPerson { get; set; }
}

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}





List<Customer> customerlist = new List<Customer>();

for (int i = 0; i <= 4; i++)
{
Customer cust = new Customer();
cust.id = i;
cust.CustPerson.FirstName = "John-" + i.ToString();
cust.CustPerson.LastName = "Doe-" + i.ToString();
cust.CustPerson.Age = 20 + i;
customerlist.Add(cust);
}

GridView1.DataSource = customerlist;
GridView1.DataBind();


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

khokhan
یک شنبه 29 فروردین 1395, 18:10 عصر
من بدون استفاده از کلاس بلدم که از اطلاعاتو از دیتابیس بیارم تو گریدویو نشون بدم ولی اینجا می خوام فقط از کلاس استفاده کنم . خیلی ممنون میشم راهنماییم کنید .

..........................................

public List<Clients> Select(string query)
{
List<Clients> list = new List<Clients>();
Clients clients = new Clients();
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataReader dataReader = cmd.ExecuteReader();
while (dataReader.Read())
{
clients.Id = dataReader["Id"].ToString();
clients.Name = dataReader["Name"].ToString();
list.Add(cliente);
}
dataReader.Close();
this.CloseConnection();
return list;
}
else
{
return list;
}
}


..........................

public class Clients
{
public string Id { get; set; }
public string Name { get; set; }
}

negar442
یک شنبه 29 فروردین 1395, 18:17 عصر
خیلی ممنون برادر ؛

حالا اگه بخوام عمل INSERT رو انجام بده با استفاده از کلاس باید چی کار کنم ؟

khokhan
یک شنبه 29 فروردین 1395, 18:41 عصر
خیلی ممنون برادر ؛

حالا اگه بخوام عمل INSERT رو انجام بده با استفاده از کلاس باید چی کار کنم ؟
وقتی می گوئید INSERT با کلاس ( لیست) انجام بشه یعنی با انبوهی از رکورد سرو کار دارین ............... و اینجا پای Bulk Insert وسط می اد
یه چیزی مثل این لینک http://blog.developers.ba/bulk-insert-generic-list-sql-server-minimum-lines-code/

negar442
دوشنبه 30 فروردین 1395, 02:47 صبح
من یادمه یک insert که زیاد پیچیده هم نبود و لیست هم توش نبود رو یه جا دیده بودم.

یعنی همین تابع select که نوشتین در ادامش تابع حذف افزودن و ویرایش هم داشت.

juza66
دوشنبه 30 فروردین 1395, 03:35 صبح
با توجه به اینکه خیلی از دوستان بعضی از پروژه (http://ir-tutorial.ir) هاشون رو از ابتدا برای هر ثبت – ویرایش و حذف و گرفتن کوئری کدنویسی (http://ir-tutorial.ir) میکنند یعنی به ازای هر یک از فرم هاشون نیاز دارن این کدنویسی (http://ir-tutorial.ir) طولانی رو انجام بدن من یک کلاس خیلی ساده و نه زیاد حرفه ای رو براتون میذارم تا براساس این کلاس بتونین خیلی راحت با دیتابیس ارتباط برقرار کنید و کوئری های مورد نظرتون رو اعمال کنید. خب یک کلاس به اسم SqlClass درست می کنیم. و کدهای زیر رو تویی کلاسمون کپی می کنیم. (کلاس مورد نظر در آخر همین مطلب پیوست شده)
– اول using System.Data.SqlClient رو در کلاس فراخوانی می کنیم
– یک متغییر به نام CheckReturn با نوع Boolean تعریف می کنیم.




public static Boolean CheckReturn = false;





– یک کلاس درست می کنیم و اسمش رو میذاریم SetData و متغییرهای که به این کلاس فرستاده میشن رو درون یک رشته به نام StrSetQuery میگیریم.


public static void SetData(string StrSetQuery) {

}



– یک اتصال برای به پایگاه داده مون در نظر می گیریم.


public static string DataBase = "Data Source=DESKTOP-OE5IOQB\\AVASOFT;Initial Catalog=dbTutorial;Integrated Security=True;";




– کوئری دریافت شده در رشته StrSetQuery رو در SqlCommand قرار میدیم


lCommand StrCommand = new SqlCommand(StrSetQuery, StrConection); StrCommand.CommandType = CommandType.Text;
StrCommand.CommandText = StrSetQuery;
StrConection.Open();



– در صورت اجرا شده کوئری دریافت شده بدون خطا متغییر CheckReturn بوده رو برابر True میذاریم. در غیر اینصورت False میکنیم. و در اخر هم ارتباط مون رو با دیتابیس قطع می کنیم.


try {
CheckReturn = true;
StrCommand.ExecuteNonQuery();
}
catch (SqlException)
{
CheckReturn = false;
}
finally
{
StrConection.Close();
}



کدهای بالا برای دریافت و اعمال کوئری برروی دیتابیس بود حال میخوایم کوئری دریافت اطلاعات دیتابیس رو بنویسم که بتونیم با یک کوئری و بازگشت نتیجه کوئری اون رو درون دیتاگیرید یا دیتاست یا دیتاآداپتر و یا هرجایی که میخوایم دریافت کنیم.
خوب برای اینکار تویی همین کلاس اصلی پروژه مون یک کلاس بنام GetData درست میکنیم و کوئری ارسال شده رو درون رشته ای بنام StrGetQuery دریافت می کنیم.


public static DataTable GetData(string StrGetQuery)
{

}




– خوب اول اتصال به پایگاه داده مون که در خط اول کلاس اصلی مون مقدار دهی کردیم را دوباره برای اتصال در این کلاس فراخوانی می کنیم.


SqlConnection StrConection = new SqlConnection(DataBase);

– اطلاعات دریافت شده StrGetQuery در رشته رو در SqlCommand اجرا می کنیم.


SqlCommand StrCommand2 = new SqlCommand(StrGetQuery, StrConection);




– خوب بر خلاف بالا که اطلاعات دریافت شده رو فقط اجرا میکردیم یعنی اطلاعات مثه ثبت رو دریافت و ثبت می کردیم و درصورت درست ثبت شده نتیجه رو با Boolean برگشت میدادیم. در اینجا نیاز داریم اگر کوئری درست بود و درست اجرا شد اطلاعات دریافت شده رو درون یک دیتاآداپتور و سپس به یک دیتاتیبل بریزیم و این اطلاعات رو برگردونیم.
– اول ساخت یک دیتاآداپتور بنام adapter میسازیم. و اطلاعات دریافت شده از SqlCommand رو پاس میدیم به دیتاآداپتور


SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = StrCommand2;





– خوب الان یک دیتاتیبل میسازیم بنام DataTBL و اگر شرط کوئری برقرار بود تویی try کلاس کد زیر رو مینویسم که اطلاعات دیتااداپتور رو Fill میکنیم (انتقال میدیم) به دیتاتیبل در غیر اینصورت عکس العملی رو تویی catchh اجرا نمیکنیم و فقط ارتباط با دیتابیس رو قطع میکنیم.


try {
adapter.Fill(DataTBL);
}
catch (SqlException)
{
StrConection.Close();
StrConection.Dispose();

}
finally
{
StrConection.Close();
StrConection.Dispose();
}
return DataTBL;




خوب تا اینجا ما یک کلاس برای ثبت – حذف – ویرایش و دریافت اطلاعات ساختیم الان نحوه استفاده از کلاسمون مانده است.
ابتدا یک فرم رو بصورت زیر میسازیم. مثلا سه تکس باکس و چهار دکمه تویی فرممون میذاریم.
دوتا تکس باکس اول نام و نام خانوادگی تکس باکس سومی برای جستجو استفاده میکنیم. دکمه ها رو اینطوری نام گذاری میکنیم. ثبت – ویرایش – جستجو – حذف مانند فرم زیر:
برای ثبت فقط این چند خط زیر رو مینویسیم. اگر کوئری درست بود و درست ثبت شده متغییر Boolean مون True و در غیر اینصورت False رو برمیگردونه.



SqlClass.SetData("Insert Into tbluser([name],[family]) Values('" + txtname.Text + "' ,N'" + txtfamily.Text + "')");
if (SqlClass.CheckReturn == true)
{
DialogResult dr = MessageBox.Show("ثبت اطلاعات با موفقیت ثبت گردید", " پیغام سیستم", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
loaddb();
}
else
{
DialogResult dr = MessageBox.Show("ثبت اطلاعات با خطا مواجه گردید", " پیغام سیستم", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}





برای حذف این چند خط زیر:


if (MessageBox.Show("آیا مایلید مورد انتخاب شده حذف شود؟", "حذف", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) == DialogResult.Yes)
{
SqlClass.SetData("DELETE FROM tbluser WHERE name=N'" + dataGridView1.CurrentRow.Cells[0].Value.ToString() + "'");
if (SqlClass.CheckReturn == true)
{
DialogResult dr = MessageBox.Show("اطلاعات با موفقیت حذف گردید", " پیغام سیستم", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
loaddb();
}
else
{
DialogResult dr = MessageBox.Show("حذف اطلاعات با خطا مواجه گردید", " پیغام سیستم", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}

}




برای جستجو هم این دو خط زیر:


DataTable dt = new DataTable(); dt = SqlClass.GetData("SELECT * FROM tbluser WHERE name LIKE '%" + txtname.Text + "%'");
dataGridView1.DataSource = dt;




منبع
http://ir-tutorial.ir/%DA%A9%D9%84%D8%A7%D8%B3-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE/

negar442
دوشنبه 30 فروردین 1395, 05:20 صبح
اون چیزی که khokhan (http://barnamenevis.org/member.php?131732-khokhan)
نوشته به خواسته من نزدیکتره .
تابع مورد نظرم به اشکال زیر معرفی شده




namespace PhoneBook.Controller
{
class ContactController
{
public static bool Add(ContactController o)
{
return true;
}
public static bool Edit(long Id, ContactController o)
{
return true;
}
public static bool Delete(ContactController o)
{
return true;
}
public static List<ContactController> SelectAll()
{
return null;
}
public static ContactController GetById(long Id)
{
return null;
}
public static List<ContactController> Search(string Keyword)
{
return null;
}
}
}




و در کلاس دیگه هم کدهاش این شکلیه :




public class ContactModel
{
public string Name { get; set; }
public string Family { get; set; }
public string FatherName { get; set; }
public string BirthDay { get; set; }



public List<PhoneNumber> NumberPhone { get; set; }
public List<ShHesab> ShHesab { get; set; }
public List< BankName> BankName{ get; set; }
public string GroupName { get; set; }
public List < AddressContact > Address{ get; set; }
}
}



و این دو تا کلاس تو برنامه اصلی استفاده میشن ولی من هر چی فکر کردم نتونستم بفهمم که این دو تا کلاس چه جوری به هم ربط پیدا می کنن . و مثلا تابع add چه کدهایی می تونه داشته باشه !
:ناراحت:

khokhan
دوشنبه 30 فروردین 1395, 12:49 عصر
اون چیزی که khokhan (http://barnamenevis.org/member.php?131732-khokhan)
نوشته به خواسته من نزدیکتره .
تابع مورد نظرم به اشکال زیر معرفی شده




namespace PhoneBook.Controller
{
class ContactController
{
public static bool Add(ContactController o)
{
return true;
}
public static bool Edit(long Id, ContactController o)
{
return true;
}
public static bool Delete(ContactController o)
{
return true;
}
public static List<ContactController> SelectAll()
{
return null;
}
public static ContactController GetById(long Id)
{
return null;
}
public static List<ContactController> Search(string Keyword)
{
return null;
}
}
}




و در کلاس دیگه هم کدهاش این شکلیه :




public class ContactModel
{
public string Name { get; set; }
public string Family { get; set; }
public string FatherName { get; set; }
public string BirthDay { get; set; }



public List<PhoneNumber> NumberPhone { get; set; }
public List<ShHesab> ShHesab { get; set; }
public List< BankName> BankName{ get; set; }
public string GroupName { get; set; }
public List < AddressContact > Address{ get; set; }
}
}



و این دو تا کلاس تو برنامه اصلی استفاده میشن ولی من هر چی فکر کردم نتونستم بفهمم که این دو تا کلاس چه جوری به هم ربط پیدا می کنن . و مثلا تابع add چه کدهایی می تونه داشته باشه !
:ناراحت:

به احتمال زیاد پروژه چند لایه هست :لبخند:

negar442
دوشنبه 30 فروردین 1395, 13:41 عصر
به احتمال زیاد پروژه چند لایه هست :لبخند:

اون چیزی که در پست 2 نوشته بودی چند لایه بود ؟ من یه همچین چیزی رو برای اینسرت می خوام .