PDA

View Full Version : استفاده از قابلیت های Find & Sort در DataView بوسیله یک کلاس Connection!



amirmk
جمعه 07 تیر 1387, 20:03 عصر
سلام به دوستان محترم سایت برنامه نویس , الحق که خیلی چیزها از تاپیک های شما یادگرفتم و از زحمات شما تشکر می کنم .

من یک کلاس کانکشن از روی یکی از آموزشها دارم و بصورت using() از آن استفاده می کنم و
کارهای درج , ویرایش , حذف تکی یا مجموعه ایی و ... را بخوبی انجام می دهم . ولی برای مرتب سازی و الاخصوص جستجو از طریق این کلاس نمی دانم چطوری این کار را انجام بدهم .

یعنی اولا" DataView و Dataset را چطوری در کلاس تعریف کنم که هم به مقصودم برسم و هم اصول شیئی گرایی را رعایت کرده باشم .
دوم -اینکه چگونه با استفاده از دستور using از قابلیت های مذکور (جستجو و مرتب سازی) در فرم ها استفاده کنم (یا آن را پیاده سازی کنم).

یک سوال سومی هم دارم و آن اینکه من یعد از درج و یا حذف اطلاعات از Fill کردن مجددبوسیله تابع fill موجود در کلاسم استفاده می کنم , که البته می خواهم برای استفاده کمتر از SELECT از تابع Referesh موجود در دیتاگرید استفاده کنم ولی نمی دانم چرا refresh
نمی شود , یعنی هیچ عملی انجام نمی دهد.datagridview1.refresh()

این کد کلاس Connection



namespace PhoneBook
{
class Connection : IDisposable
{
private static string strCon = "";
private SqlConnection scon;
private SqlCommand scom;
private SqlDataAdapter sda;
private SqlCommandBuilder cb;

Private DataSet ds = new DataSet();
private DataView dv;



private BindingSource BindingSource1 = new BindingSource();

public Connection()
{
scon = new SqlConnection(strCon);
scon.Open();
scom = new SqlCommand();
scom.Connection = scon;
sda = new SqlDataAdapter(scom);
scom.CommandType = CommandType.Text;
cb = new SqlCommandBuilder(sda);
}

public static string ConnectionString
{
set { strCon = value; }
get { return strCon; }
}

private void Dispose(bool Disposing)
{
scon.Close();
}

public void Dispose()
{
Dispose(true);
}

public SqlConnection objConnection
{
get { return scon; }
set { scon = value; }
}

public SqlDataAdapter Adapter
{
get { return sda; }
set { sda = value; }
}

public SqlCommand Command
{
set { scom = value; }
get { return scom; }
}

public SqlCommandBuilder Builder
{
get { return cb; }
set { cb = value; }
}

public void FillDataGrid(DataGridView dgvList)
{
this.sda.Fill(ds,"public");
dv = new DataView(ds.Tables["public"]);
BindingSource1.DataSource = dv;
dgvList.DataSource = BindingSource1;
}


#region IDisposable Members

void IDisposable.Dispose()
{
Dispose(true);
}

#endregion

}
}

این هم نمونه using که در فرم ها استفاده می کنم .





using (Connection objConn = new Connection())
{
objConn.Command.CommandText =
"UPDATE [comments] SET comment = @comment WHERE comments.id = @id; " +
"UPDATE [addresses] SET address = @address WHERE addresses.id = @id; " +
"UPDATE [contacts] SET worktel = @worktel, hometel = @hometel, mobile = @mobile, fax = @fax, email = @email, url = @url WHERE contacts.id = @id; " +
"UPDATE [public] SET fname = @fname, lname = @lname, company = @company, section = @section WHERE [public].id = @id;";
objConn.Command.CommandType = CommandType.Text;

objConn.Command.Parameters.AddWithValue("@id", intID);
objConn.Command.Parameters.AddWithValue("@fname", txtName.Text);
objConn.Command.Parameters.AddWithValue("@lname", txtLastName.Text);
objConn.Command.Parameters.AddWithValue("@company", txtCompany.Text);
objConn.Command.Parameters.AddWithValue("@worktel", txtWorkTel.Text);
objConn.Command.Parameters.AddWithValue("@hometel", txtHomeTel.Text);
objConn.Command.Parameters.AddWithValue("@mobile", txtMobile.Text);
objConn.Command.Parameters.AddWithValue("@fax", txtFax.Text);
objConn.Command.Parameters.AddWithValue("@email", txtEmail.Text);
objConn.Command.Parameters.AddWithValue("@url", txtUrl.Text);
objConn.Command.Parameters.AddWithValue("@address", txtAddress.Text);
objConn.Command.Parameters.AddWithValue("@comment", txtComment.Text);
objConn.Command.Parameters.AddWithValue("@section", cmbGroup.SelectedItem.ToString());

try { objConn.Command.ExecuteNonQuery(); }
catch (SqlException sqlExceptionErr) { MessageBox.Show(sqlExceptionErr.Message); }
}
با تشکر قبلی از توجه شما



امیر

amirmk
شنبه 08 تیر 1387, 12:36 عصر
من فکر می کنم که جواب به این سوال بالا برای بچه ها ی برنامه نویس مثل آب خوردن باشه ,
خواهش می کنم ثواب کنید و این را به ما مبتدی ها هم یاد بدید , مطمئن باشید راه دوری
نمی رود. :اشتباه:

amirmk
یک شنبه 09 تیر 1387, 17:15 عصر
سلام , گاهی اوقات حس می کنم که یک روح هستم و کسی من رو نمی بینه !

اگر DataView و DataSet را در کلاس بصورت public static تعریف کنم مشکلم حل میشه,
به اینصورت که وقتی یا SQL عملیات درج , ویرایش و ... را انجام میدم برای نمایش تغییرات در
datagridview دیگر از fill کردن مجدد آن بوسیله SELECT استفاده نمی کنم بلکه با تغییر در
DataView بعد از اعمال درج , ویرایش و ... , datagridview هم بصورت اتوماتیک تغییرات را نشان می دهد.
و همچنین از امکان Sort و Find در DataView می توانم استفاده کنم.

دوستان آیا این روش درسته ؟:ناراحت:

با تشکر

amirmk
دوشنبه 10 تیر 1387, 13:32 عصر
فکر نکنم سوال من در بالا آنقدر گنگ بوده باشد که هیچ کدام از این 50 , 60 نفری که این تاپیک را دیدن متوجه نشده باشند !!!!!!!!!!!!!!!!!! و فکر نکنم آنقدر سخت بوده باشد که هیچ کدام قادر به پاسخگویی نیز نبوده باشند !!!!!!!
توی Forum های خارجی وقتی سوالی را می پرسی تا به جوابت نرسیدی ولت نمی کنند ولی اینجا با هزار بار خواهش هم هیچ کس جوابت رو نمی دهد.
واقعا متاسفم! :(