ورود

View Full Version : پیدا کردن سطرهای ویرایش شده در GridView



Developer Programmer
چهارشنبه 18 دی 1387, 20:36 عصر
چطور میشه فهمید کاربر، کدام سطرها و داده ها رو در GridView ویرایش کرده تا بتونیم صحت مقادیر اونها را چک کنیم؟

saied_genius
پنج شنبه 19 دی 1387, 19:18 عصر
استفاده از property :

CellEndEdit

از گريد.

Developer Programmer
پنج شنبه 19 دی 1387, 20:55 عصر
مثال MSDN رو در مورد CellEndEdit , CellValidating استفاده کردم. اما جواب نداد.

ببین من میخوام هر بار که کاربر، داده ای رو ویرایش کرد یا یه سطر جدید اضافه کرد. قبل از تحویل داده ها به DB درست بودن مقادیر اونها رو بررسی کنم.

اوبالیت به بو
جمعه 20 دی 1387, 22:08 عصر
چطور میشه فهمید کاربر، کدام سطرها و داده ها رو در GridView ویرایش کرده تا بتونیم صحت مقادیر اونها را چک کنیم؟راستش سوال شما دو تا مفهوم مي ده:
1- مي خواين ركوردهاي ويرايش شده رو پيدا كنيد.
2- فيلدها رو قبل از اينكه دز DB ذخيره بشن رو Validate كنيد.

بین من میخوام هر بار که کاربر، داده ای رو ویرایش کرد یا یه سطر جدید اضافه کرد. قبل از تحویل داده ها به DB درست بودن مقادیر اونها رو بررسی کنم.اين مقادير رو در يك ArrayList ذخيره كنيد و يه متد در داخل كلاس مورد نظر براي Validate كردن بسازيد و اين ArrayList رو به اون متد پاس بديد. بعد با توجه به نوع اعتبار سنجي خطاها رو صادر كنيد.
مثلاً:


ArrayList arr = new ArrayList();
int ErrNumber = 0; //Error Number
string ErrText = ""; //Error Description

public bool Validate(ArrayList ArrValues)
{
if (ArrValues[0].ToString() == "")
{
ErrNumber = 1;
ErrText = "First Field is Empty";
}
if (ArrValues[1].ToString() == "")
{
ErrNumber = 2;
ErrText = "Second Field is Empty";
}
if (ErrNumber == 0)
return true;
else
return false;
}
private void button1_Click(object sender, EventArgs e)
{
ErrText = "";
ErrNumber = 0;
arr.Clear();
arr.Add(textBox1.Text);
arr.Add(textBox2.Text);
bool IsValidate= Validate(arr);
if (IsValidate)
{
MessageBox.Show("Register");
//Insert in Data Base;
}
else
{
MessageBox.Show( ErrText .ToString () );
//Can not Insert in Data Base;
}
}

اگر چند لايه كار مي كنيد متد Validate رو در Bussines Logic برنامه قرار بديد.
در ضمن مي تونيد اعتبار سنجي ها رو خودتون تنظيم كنيد مثلاً ورود كاراكترهاي عددي، صحت تاريخ، خالي نبودن و ... و با توجه به نوع Validate پيام مورد نظر رو ارسال كنيد.

Developer Programmer
شنبه 21 دی 1387, 22:10 عصر
- مي خواين ركوردهاي ويرايش شده رو پيدا كنيد.
2- فيلدها رو قبل از اينكه دز DB ذخيره بشن رو Validate كنيد
دقیقا همین دو تا !
من تو دات نت مبتدیم؛ نمیدونم وقتی با GetChange گرفتمش چیکارش کنم. و چطور بخونمش و بعد بدم به DB
راستی، من هر چی Ebook در مورد این ADO.NET میخونم همشون از متدهای ADO واسه ذخیره و ویرایش استفاده میکنن که واقعا خسته کننده است... واست مقدوره که یک پروژه ساده بسازی و با دستورات DML SQL توش کاری کنی؟

مثلا من امروز میخواستم روی فیلد FirstName جستجو بذارم... اومدم این کد رو نوشتم


Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

SqlDataAdapter1.SelectCommand.CommandText = "select * from Employees WHERE (FirstName LIKE N'%" + TextBox1.Text + "%'"
'SqlDataAdapter1.Fill(myDataSet11, "Employees")
'DataGridView1.DataSource = myDataSet11.Tables(0)

End Sub

اما اصلا تغییرات اعمال نمیشن

اوبالیت به بو
یک شنبه 22 دی 1387, 17:56 عصر
من تو دات نت مبتدیم؛ نمیدونم وقتی با GetChange گرفتمش چیکارش کنم. و چطور بخونمش و بعد بدم به شما مي خواين يك سطر از DataGridview رو ويرايش كنيد درسته؟
خوب شما پس از اتمام كار (يعني ويرايش كردن) وقتي مي خواين رويه يه Button يا ... كليك شد Validate بشه.
شما بوسيله همين ArrayList مي تونيد اين كار رو انجام بديد. فقط فرقش اينه كه ArrayList رو بايد بر اساس ترتيب فيلدهاي اون ركورد Add كنيد يعني:


arr.add(DataGridView1.Selectedcells[0].value());
arr.add(DataGridView1.Selectedcells[1].value());
arr.add(DataGridView1.Selectedcells[2].value());
.
.
.
حالا مي توني arr رو پاس بدي. و بهتر هستش كه كدهاي DataGridView رو درون Try..Catch بزاري.

مثلا من امروز میخواستم روی فیلد FirstName جستجو بذارم... اومدم این کد رو نوشتميه نكته هيچ وقت روي FirstName نميشه Search گذاشت بلكه اينجور فيلدها رو كه ممكن هست نمونه يا ركورد تكراري زياد داشته باشه رو فيلتر مي كنن:


FirstName like '" + TextBox1.Text + "*'"


استی، من هر چی Ebook در مورد این ADO.NET میخونم همشون از متدهای ADO واسه ذخیره و ویرایش استفاده میکنن که واقعا خسته کننده است...


http://www.murach.com/books/cs08/adonet.htm
http://www.objectdiscovery.com/training/course/programming/microsoft/csharp/ado/index.html
پولي : http://www.objectinnovations.com/PriceList.html#DotNet
http://www.codersource.net/csharp_adonet_tutorial_ed.html

علیرضا مداح
دوشنبه 23 دی 1387, 19:48 عصر
سلام دوست عزیز،
اگر شیء DataGridView به شیء DataTable/DataSet بایند شده است، میتوانید از متد GetChanges مربوط به شیء DataTable/DataSet بدیمنظور بهره گیری نمایید:

سلام دوست عزیز .

1) برای اینکار میبایست از تایع GetChanges مربوط به شی ء دیتاست استفاده نمایید که در زیر طریقه استفاده از آن آمده است . این تابع دارای دو Overload میباشد که در زیر آمده است :

Public Function GetChanges() As System.Data.DataSet
با فراخوانی این تابع ، یک کپی از دیتاست مورد شما که شامل تمام رکوردهای تغییر یافته(در تمام جداول موجود در دیتاست که شامل رکوردهای حذف شده ، تغییر یافته ، تغییر نیافته و اضافه شده میباشد . ) از آخرین باری که متد AcceptChanges مربوط به آبجکت دیتاست فراخوانی شده و یا دیتاست در حافظه بارگذاری شده است را برمیگرداند .

Public Function GetChanges(ByVal rowStates As System.Data.DataRowState) As System.Data.DataSet
در اینجا نیز تابع GetChanges همانند OverLoad قبلی خود رکوردهای تغییر یافته را در یک کپی از شی ء دیتاست برمیگرداند با این تفاوت که در اینجا شما میتوانید رکوردهای تغییر یافته را با استفاده از مقدار شمارشی DataRowState فیلتر نمایید .
این مقدار شمارشی دارای چهار ثابت میباشد :

Detached = 1
UnChanged = 2
Added = 4
Deleted = 8
Modified = 16


UnChanged
سطرهایی که هیچ تغییری در آنها رخ نداده است انتخاب مینماید. (از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

Added
سطرهایی که به شی ء DataRowCollection اضافه شده است (از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

Deleted
سطرهایی که از شی ء DataRowCollection توسط متد System.Data.DataRow.Delete حذف شده اند (از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

Modified
سطرهایی که دچار تغییر شده اند ((از آخرین باری که متد AcceptChanges مربوط به شی ء دیتاست فراخوانی شده است)

همچنین شی ء DataTable نیز دارای تابع GetChanges میباشد ، با این تفاوت که این تابع یک کپی از شی ء DataTable که تمام رکوردهای تغییر یافته از آخرین باری که متد AcceptChanges مربوط به آبجکت DataTableفراخوانی شده و یا شی ء DataTable در حافظه بارگذاری شده است را برمیگرداند .

Developer Programmer
دوشنبه 23 دی 1387, 21:31 عصر
نمی دونم شاید چون من همه چیز رو با منطق ADO , Delphi مقایسه میکنم، به مشکل بر میخورم. مفاهیم و موارد استفاده DataAdapter , DataReader بهمراه Command و DataSet گیج کننده است.

وقتی، با TextBox اطلاعات رو نشون میدی یا میخونی، راحت میشه ویرایش کرد یا رکورد جدید ایجاد کرد. و با یه دستور Insert Into و Update اطلاعات رو به DB فرستاد. ولی وقتی به چیزی مثل DataGridView وصل میشی، ظاهرا فقط باید با GetChange خوند و با Update, acceptChange هم ذخیره کرد.