PDA

View Full Version : dataview



probit
سه شنبه 13 اردیبهشت 1384, 18:10 عصر
یک datagrid دارم که به یک dataview (بر اساس EmployeeID=x فیلتر شده) متصل است حالا اگردر زمان اجرا سطری حذف یا اضافه شود می خواهم این تغییرات درtable اعمال شود

یاشار
سه شنبه 13 اردیبهشت 1384, 19:50 عصر
DataView1.AllowDelete = True
DataView1.AllowEdit = True
DataView1.AllowNew = True

probit
چهارشنبه 14 اردیبهشت 1384, 06:37 صبح
این کار را کرده ام ولی وقتی می خواهم datagrid را دستکاری کنم تمام اطلاعات پاک می شود و فقط یک سطر می توان در آن نوشت که اون سطر هم به table اضافه نمی شود

DataView1.AllowDelete = True
DataView1.AllowEdit = True
DataView1.AllowNew = True
آیا با این کد اگه سطری تغییر کرد همان سطر در جدول تغییر می کند ؟ یا برای این کار هم باید کد نوشت ؟

یاشار
چهارشنبه 14 اردیبهشت 1384, 21:12 عصر
وقتی می خواهم datagrid را دستکاری کنم
DataGrid رو چطور دستکاری میکنید، با کد یا از طریق UI ؟

probit
پنج شنبه 15 اردیبهشت 1384, 15:34 عصر
منظور من در زمان اجراست وقتی میخواهم سطری اضافه کنم محتویات datagrid پاک میشود

یاشار
پنج شنبه 15 اردیبهشت 1384, 16:47 عصر
منظور من در زمان اجراست

منظور من هم در زمان اجراست. موقعی که برنامه در حال اجراست شما می‌تونید یک دکمه رو بزنید که یه سری کد اجرا بشه و از طریق کد سطرها به جدول‌تون اضافه بشه. یه راه دیگه هم اینه که "از طریق UI" کاربر برنامه‌تون با ماوس روی یکی از خونه‌های DataGrid کلیک می‌کنه و با استفاده از کیبورد، یه چیزی تایپ می‌کنه.


آیا با این کد اگه سطری تغییر کرد همان سطر در جدول تغییر می کند ؟ یا برای این کار هم باید کد نوشت ؟

تغییرات بدون احتیاج به کدنویسی توی جدول‌تون هم اعمال می‌شه. فقط دقت داشه باشید که این جدول‌ها تو DataSet هستند و اگر بخواهین تو دیتابیس هم تغییرات اعمال بشه باید Update کنین.




وقتی میخواهم سطری اضافه کنم محتویات datagrid پاک میشود

احتمالا یه مشکلی توی مقید ( Bind ) کردن DataGrid به DataSet وجود داره. یه نگاهی به این مثال (http://www.barnamenevis.org/forum/download.php?id=3983) بندازید، اگر مشکلتون حل نشد، توضیح بدین که DataSet رو چطور Fill می‌کنید، و View رو چطور به DataSet ربط می‌دید. اگر یه خلاصه‌ای از کدتون رو هم بگذارید حتما کمک می‌کنه

probit
جمعه 16 اردیبهشت 1384, 08:43 صبح
این یک برنامه ثبت نام است وشامل یک فرم که کاربر ابتدا در یک textbox شماره دانشجویی را وارد میکند سپس یک دگمه روی فرم را میزند

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dsstd.Clear()
dastd.Fill(Dsstd)
dataview1.Table = Dsstd.Tables(0)
dataview1.RowFilter = "ID = " & id.Text
Me.dg.DataSource = dataview1
end Subtable style در datagrid به این صورت است که فقط فیلد های شماره درس(IDC) تعداد واحد(QTY) و مبلغ هر واحد(price) نمایش داده میشود در این قسمت میتوان سطری را تغییر حذف وی اضافه کرد و در اخر هم با زدن دکمه تایید dg به جدول bind میشود
Me.dastd.Update(Me.Dsstd.std)
من فکر میکنم مشکل بخاطر اینه که در dg فیلد id (شماره دانشجویی) نمایش داده نمیشود چه شکلی میشه به آن گفت که id این سطر در textbox هست
سوال دیگه من اینه که می خواهم در یک textbox در اخر فرم مبلغ کل ثبت نام هم نوشته شود چه کدی باید نوشت

یاشار
جمعه 16 اردیبهشت 1384, 13:14 عصر
علت اینکه وقتی سطری رو اضافه می‌کنید، پاک می‌شه، اینه که DataView فیلتر شده و فقط یک ID خاص رو نشون میده. سطر جدیدی که وارد کردید در واقع به جدول اضافه شده ولی در Grid نمایش داده نمی‌شه. قبل از اینکه سطر جدید رو وارد کنید باید RowFilter رو برابر Nothing یا "" قرار بدید.

بعید می‌دونم اشکال از Style باشه.


چه شکلی میشه به آن گفت که id این سطر در textbox هست

دقیقا متوجه منظورتون نمی‌شم، اما فکر می‌کنم با مقید ( Bind ) کردن TextBox به ID ، مشکلتون برطرف بشه. اگر باز هم مشکلتون پا برجاست کد Select مربوط به آداپتورتون رو پست کنید، تا مشخص بشه چه فیلدهایی از DB خونده می‌شن.


در اخر فرم مبلغ کل ثبت نام هم نوشته شود



TextBox1.Text = Cstr(Dsstd.Tables(0).Compute("sum(price)", Nothing))

probit
شنبه 17 اردیبهشت 1384, 06:33 صبح
در آخر روال Button2_Click کد dataview1.RowFilter = Nothing را اضافه کردم مشکل پاک شدن datagrid حل شد ولی سه مشکل داشت
1) datagrid فیلتر نبود و همه جدول را نمایش می داد
2) اگر سطری اضافه کنم در زمان update کردن به این سطرها id را اضافه نمی کرد(ستون id خالی بود)
3) اگر داده های سطری را تغییر دهیم یا حذف شود در زمان update کردن Error به کد( Me.dastd.Update(Me.Dsstd.std
می گرفت
کد Select مربوط به آداپتور : select * from std
در مورد مبلغ کل ثبت نام هم می خواهم آنهایی که در datagrid هستند محاسبه شوند و در هر سطر آن باید price*QTY شود و مبلغ کل جمع تمام این سطرهاست

یاشار
یک شنبه 18 اردیبهشت 1384, 13:53 عصر
ولی سه مشکل داشت datagrid فیلتر نبود و همه جدول را نمایش می داد

خوب، می‌خواهید جدول‌ها فیلتر باشند یا نباشند ؟ اگر می‌خواهید فقط یک ردیف رو دستکاری کنید بهتره به جای فیلتر کردن، به ازای هر فیلد دیتابیس‌تون یک کنترل روی فرم‌تون بگذارید و اونها رو به دیتاست مقید کنید. مثل همون کاری که DataFormWizard انجام می‌ده.


اگر سطری اضافه کنم در زمان update کردن به این سطرها id را اضافه نمی کرد

مشکل از روش مقید ( Bind ) کردن کنترل‌هاست. اگر ستون ID درست تعریف شده باشه، باید در همون لحظه‌ای که ردیف جدید اضافه می‌شه ایجاد بشه، نه موقع Update . این مشکل error موقع Update رو هم برطرف می‌کنه.


در مورد مبلغ کل ثبت نام هم می خواهم آنهایی که در datagrid هستند محاسبه شوند

چرا ِDataGrid ؟ وقتی تعداد ردیف‌ها زیاده، ممکنه چند ردیف در DataGrid نمایش داده نشن. باید منبعی که DataGrid ازش اطلاعات رو می‌گیره رو استفاده کنید که در مورد برنامه شما یعنی دیتاست.

probit
سه شنبه 20 اردیبهشت 1384, 09:33 صبح
در datagrid خاصیت tablestyle را برداشتم و ستون id را هم نمایش میدهد ولی باز هم درحذف یا تغییر سطرها error زیر را میگیرد



dditional information: Update requires a valid UpdateCommand when passed DataRow collection with modified rows.

یاشار
سه شنبه 20 اردیبهشت 1384, 16:06 عصر
عرض کردم خدمتتون، بعید می‌دونم اشکال از Style باشه.

مشکل از روش مقید ( Bind ) کردن کنترل‌هاست. id جدول شما باید به صورت خودکار ایجاد بشه.

آیا همون لحظه‌ای که ردیف جدید رو وارد می‌کنید id جدید هم خود به خود اضافه می‌شه ؟

DataAdapter ی که استفاده می‌کنید رو چطور ایجاد کردید ؟ ( از toolbox/data برداشتید یا جدولتون رو از serverexplorer با ماوس Drag&Drop کردید یا با کد ایجاد کردید ؟ )

ضمنا از چه دیتابیسی استفاده میکنید ؟

probit
سه شنبه 20 اردیبهشت 1384, 17:06 عصر
آیا همون لحظه‌ای که ردیف جدید رو وارد می‌کنید id جدید هم خود به خود اضافه می‌شه ؟
نه اضافه نمیشود حتی وقتی textbox ID را هم به جدول bind میکنم باز هم اضافه نمی شه
dataadapter را از toolbox/data برداشتم و دیتابیس هم access

یاشار
سه شنبه 20 اردیبهشت 1384, 17:37 عصر
به احتمال زیاد DataAdapter تون درست Configure نشده. ساده‌ترین روش اینه که از ServerExplorer جدولتون رو با ماوس بگیرید و روی فرم رها کنید. ویژوال استودیو به صورت اتوماتیک دستورات Select و Delete و Update رو ایجاد می‌کنه. ولی قبلا :

DataAdapter تون رو از محیط Designer ( پایین فرم ) پاک کنید.

اگر توی Solution Explorer دیتاستی با پسوند xsd. مونده ، اون رو هم پاک کنید.

OleDBConndection هم اگر در محیط Designer هست پاک کنید.

از ServerExplorer جدول مورد نظرتون رو روی فرم بندازید. یک OleDBConnection و OleDataAdapter ایجاد میشه. روی Adapter کلیک راست کنید و GenerateDataSet رو در منویی که باز می‌شه کلیک کنید. از دیتاست جدیدی که درست شده استفاده کنید.

probit
چهارشنبه 21 اردیبهشت 1384, 09:21 صبح
وقتی dataadapter را می سازم در آخر کار برای update & delete پیغام زیر را می دهد

Could not determine which columns uniquely identify the rows for "std"

یاشار
چهارشنبه 21 اردیبهشت 1384, 14:33 عصر
توی Accsess فیلدی برای PrimaryKey تعریف نکردید یا dataadapter شامل اون فیلد نیست.

probit
پنج شنبه 22 اردیبهشت 1384, 17:11 عصر
یک فیلد primary key به جدول اضافه کردم مشکل data adapter حل شد ولی باز هم برای حذف یا تغییر سطر این error را می گیره:

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
و باز هم اگر سطری اضافه کنم به این سطرها id را اضافه نمی کنه (textbox به فیلد id در جدول bind شده )

یاشار
پنج شنبه 22 اردیبهشت 1384, 19:39 عصر
بهتره شما اول از یک دیتاگرید ساده ( که همه ستون‌ها رو نشون میده ) شروع کنید و بعد از اینکه مطمئن شدید همه چیز ( Add,Update,Delete ) درست کار می‌کنه، برید سراغ Complex Binding . این پیغام خطایی که پست کردید هیچ اطلاعات خاصی بدست نمی‌ده.

probit
جمعه 23 اردیبهشت 1384, 08:28 صبح
این کار را هم کرده ام باز هم همین error را می گیره این error باز هم بر روی dastd.update(dsstd.std) است

علیرضا مداح
جمعه 23 اردیبهشت 1384, 11:12 صبح
سلام .
دوست عزیز کد خود را در داخل دستور Try---Catch قرار دهید تا علت بروز خطا دقیقا" معلوم شود .



Try
'Your Code...
Catch ex As OleDb.OleDbException
MsgBox(ex.ErrorCode & " : " & ex.Message)
End Try

سپس متن MessageBox را دقیقا" اینجا بنویسید ...

probit
جمعه 23 اردیبهشت 1384, 11:47 صبح
آقا مشکل Delete & Update حل شد ولی باز هم اگر سطری اضافه کنم به این سطرها id را اضافه نمی کنه شاید بخاطره این باشه که وقتی سطری اضافه می کنم textbox که به dv , bind شده خا لی می شود اگر هم bind نکنم باز هم id را به جدول اضافه نمی کنه حالا چه شکلی به آن بگویم فیلد id را برابر textbox قرار بده؟

probit
سه شنبه 27 اردیبهشت 1384, 08:07 صبح
کسی نمی تونه راهنمایی کنه

DaneshSoft
پنج شنبه 27 مرداد 1384, 10:56 صبح
من می خواهم گزینه انتخاب مقدار صحیح/غلط به صورت علامت تیک در DataGrid نمایش داده شود اما این حالت تنها در زمانی اتفاق می افتد که اندازه کادرها را تنظیم نکرده باشم برای اینکار و همچنین برای استفاده از تصویر در فیلدها چه کنم؟