PDA

View Full Version : نمايش اطلاعات DataBase درون ListView در WPF



vandermond
دوشنبه 08 تیر 1388, 23:43 عصر
سلام
من تو اتصال يك ديتابيس به ليست ويو مشكل دارم. يعني دقيقا نميدونم چه جوري هستش.
با ديتاگريد تو WinApp ياد دارم ولي اينو نميدونم.
اگه هم حوصله جواب دادن نداريد لطفا معادل سي شارپ اين كد وي بي رو بديد:

Dim customer = From c In database.Customer _
Where c.State="CA" _
Select c
ممنون...


ويرايش:تبديل كد نياز نيست.

Ali_Mor
سه شنبه 09 تیر 1388, 10:26 صبح
در شماره دوم مجله برنامه نویس یک مقاله خیلی خوب در مورد wpf هست که اونجا یک مثال برای binding به یک کامبوباکس آورده شده که فکر می کنم کارت رو با لیست ویو هم راه بندازه.

atilia
سه شنبه 09 تیر 1388, 11:09 صبح
سلام
من تو اتصال يك ديتابيس به ليست ويو مشكل دارم. يعني دقيقا نميدونم چه جوري هستش.
با ديتاگريد تو WinApp ياد دارم ولي اينو نميدونم.
اگه هم حوصله جواب دادن نداريد لطفا معادل سي شارپ اين كد وي بي رو بديد:

Dim customer = From c In database.Customer _
Where c.State="CA" _
Select c
ممنون...

var customer =from c in database.Customer
Where c.State=="ca"
select c;
یا
var customer=database.customer.Where(c=>c.State=="ca");
البته اگه منظورت linq هست چون من نمیدونم اون دستوری که نوشتی واسه linq یا نه

vandermond
سه شنبه 09 تیر 1388, 16:14 عصر
ممنون از كمك هاتون من اون مقاله رو خوندم و الان هم طبق اون يك برنامه نوشتم ولي نميدونم چرا هر كاري ميكنم هيچ چيزي نشون نميده. به Binding ربطي نداره چون تو قسمت

<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
هر چيزي كه ميزارم (حتي يك TextBlock ساده كه Text اون رو خودم دستي ميدم) ، نمايش نميده.
اگه كامل خوندين اون قسمت رو لطفا بگيد كه از كلاس BookCollection و متد GetBook اون كجا استفاده كرده؟؟؟ چون من فكر ميكنم مشكل همين جا باشه. لطف كنيد و جواب بديد.
درباره تبديل كد هم خيلي ممنون جناب atilia تو همون مقاله از اين كد ها استفاده كرده و اونجا فهميدم بايد چه كار كنم. بازهم ممنون از كمكتون.
ممنون...

Mahdi.Kiani
سه شنبه 09 تیر 1388, 20:16 عصر
سلام دوست عزیز
توی اون مقاله من کامل توضیحات را داده بودم. تنها نکته ای که به اون اشاره نشده بود فراخوانی متد GetBooks از کلاس BookCollection بود که البته مطلب خیلی مهمی نیست./
برای این منظور می توانید کد زیر را در رویداد لود Window مورد نشر بنویسید./



cboBooks.ItemsSource = BookCollection.GetBooks();




موفق باشید./

پ و
تمام مثال های مقاله را آپلودخواهم کرد./

vandermond
سه شنبه 09 تیر 1388, 22:34 عصر
آره حواسم نبود كه بايد فراخواني بشه. ببخشيد.
ممنون جناب كياني .
توي ListView هم به همين ترتيب خيلي راحت تونستم كار كنم. واقعا WPF عاليه. من خيلي دنبال يك همچين چيزي ميگشتم كه به راحتي و با اينكه نياز نيست چندين هزار كد بنويسم ظاهر رو خيلي خوب درست كنم. و آموزش هاي شما (آقاي كياني) رو خوندم. اونها هم عالي بودن ولي اي كاش ادامه ميداديد.
ممنون.

vandermond
چهارشنبه 10 تیر 1388, 16:20 عصر
ببخشيد دوستان من با XML كه نوشتم درست بود ولي وقتي با اكسس يك ديتابيس ساختم و خواستم تو ListView نمايش بدم، خطا ميده(خطا زمان اجرا):

No error message available, result code: DB_E_ERRORSOCCURRED(0x80040E21).
ببخشيد اينو اينجا مطرح كردم . احتمالا مشكل در گرفتن اطلاعات از ديتابيس هستش.(من با ديتابيس زياد كار نكردم). اگه ميشه بگيد چه طور مثل اون مقاله كه اطلاعات رو از يك فايل XML گرفته بود، همين كار رو براي اكسس بكنم.
ممنون...

Mahdi.Kiani
چهارشنبه 10 تیر 1388, 17:20 عصر
ببخشيد دوستان من با XML كه نوشتم درست بود ولي وقتي با اكسس يك ديتابيس ساختم و خواستم تو ListView نمايش بدم، خطا ميده(خطا زمان اجرا):

No error message available, result code: DB_E_ERRORSOCCURRED(0x80040E21).ببخشيد اينو اينجا مطرح كردم . احتمالا مشكل در گرفتن اطلاعات از ديتابيس هستش.(من با ديتابيس زياد كار نكردم). اگه ميشه بگيد چه طور مثل اون مقاله كه اطلاعات رو از يك فايل XML گرفته بود، همين كار رو براي اكسس بكنم.
ممنون...
سلام
کدهایی که برای fetch کردن داده ها از access را نوشتید را بنویسید تا ببنم مشکل از کجاست./
به احتمال بسیار زیاد ایراد در connection string شما می باشد./
موفق باشید./

vandermond
چهارشنبه 10 تیر 1388, 18:31 عصر
كدهايي كه نوشتم(اينا براي قسمت اصلي كلاس Window1 هستش):

const string _strConnectionString = "provider=SQLOLEDB;server=localhost;"+
"database=PayDocumentDataBase.accdb;Integrated Security=true";
const string _strCommandText = "SELECT CashNumber,CashDate,Bank,"+
"PriceCharacter,PriceNumber " +
"FROM Pay_CustomerTable";

OleDbConnection objConnection;
OleDbDataAdapter objDataAdapter;
DataSet objDataSet;
اين كد هم براي Window_Load هستش :

objConnection = new OleDbConnection(_strConnectionString);
objDataAdapter = new OleDbDataAdapter(_strCommandText, objConnection);
objDataSet = new DataSet();
objDataAdapter.Fill(objDataSet, "Pay_CustomerTable");
روي خط آخر (پر كردن DataSet) اون خطايي كه گفتم رو ميده.

vandermond
پنج شنبه 11 تیر 1388, 11:15 صبح
تو يه جايي خوندم كه Provider رو بايد مثل كد زير بنويسم. حالا اينو نگاه كنيد:

const string _strConnectionString = "provider=Microsoft.Ace.OLEDB.12.0;server=localhost ;Persist Security Info=true;" +
"data source=PayDocumentDataBase.accdb;Integrated Security=true";

ولي اين رو هم كه نوشتم خطاي زير رو داد (خطا زمان اجرا):

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
اين خطا رو هم رو همون خطي كه گفتم ميگيره. (البته مربوط به باز كردن كانكشن هست. چون وقتي قبلش كانكشن رو باز ميكنم رو اون خط همين خطا رو ميگيره. حالا ديگه مطمئن هستم كه مربوط به Connection String هستش. كمك كنيد)
لطفا كمك كنيد.
ممنون...

vandermond
پنج شنبه 11 تیر 1388, 21:09 عصر
باز هم سلام
اين قده جواب نداديد كه خودم سخت دست به كار شدم و تونستم اون مشكل رو حل كنم (البته خيلي آسون بود. همه متن هاي كانكشن استرينگ رو پاك كردم و فقط Provider , Server , data source رو گزاشتم.)
حالا سوال فرق كرده ديگه. فرض كنيد من اطلاعات رو گرفتم و توي يك DataSet ذخيره كردم. حالا چه طور ميتونم يك آرايه از اونها درست كنم؟؟؟
يعني هر ركورد بشه يك عضو آرايه.
اين يكي رو ديگه نا اميدم نكنيد جون من. نزاريد باز سخت دست به كار بشم.
لطفا كمك
ممنون...

Mahdi.Kiani
جمعه 12 تیر 1388, 08:06 صبح
با سلام


باز هم سلام
اين قده جواب نداديد كه خودم سخت دست به كار شدم



آفرین برشما!
دقیقا هدف بنده هم همین بود./ در بسیاری از موارد فقط سر نخ را به کاربران میدهم تا خودشون بدنبال راه حل کامل اون بگردند.چون این برای آن ها بسیار مفید تر از اونه که من جواب را کامل و آماده قرار بدهم./(البته در برخی موارد هم همین کار را می کنم)


حالا سوال فرق كرده ديگه. فرض كنيد من اطلاعات رو گرفتم و توي يك DataSet ذخيره كردم. حالا چه طور ميتونم يك آرايه از اونها درست كنم؟؟؟
يعني هر ركورد بشه يك عضو آرايه.
اين يكي رو ديگه نا اميدم نكنيد جون من. نزاريد باز سخت دست به كار بشم.
لطفا كمك
ممنون...
چرا می خواهید بریزید درون آرایه؟

راستی یک سوال را در دو بخش نپرسید.ممنون
موفق باشید./

vandermond
جمعه 12 تیر 1388, 09:10 صبح
من ميخوام همون طوري كه شما تو مقالتون اطلاعات رو از يك فايل XML بصورت آرايه گرفتيد، من هم اطلاعات رو از ديتابيس به آرايه تبديل كنم كه بعد بتونم تو ComboBox يا ListView نمايش بدم. اگه روش بهتري وجود داره من الزامي ندارم كه به آرايه تبديل كنم.
من از بابت پرسيدن سوال در دوبخش واقعا عذر ميخوام ولي چون اين مشكل ادامه مشكلم تو اين تاپيك بود اينجا نوشتم كه اون دوستاني كه تا اينجا لطف كردن و جواب دادن ، اين مشكل رو هم ببينند و با توجه به اين كه بازديدكنندگان اين تالار نسبتا كم هستند ، تو تالار سي شارپ هم گذاشتم. اما ميدونم كارم اشتباه بوده و قول ميدم دوباره تكرار نشه. اگه اجازه بديد خوانندگان اون تاپيك رو به اينجا دعوت كنم(حالا كه قفلش كرديد اگه ميشه خودتون لينك اين تاپيك رو بزاريد اگه ميخوايد خب نزاريد اين باشه جريمه من(گرچه خيلي كمه)). باز هم ببخشيد. شرمنده:خجالت::خجالت:
اگه ميشه سريعتر جواب بديد من از فردا ديگه بايد برم درس و ... و احتمالا خيلي كمياب ميشم و اين برنامه رو هم بايد تموم كنم(فعلا اين يكي رو كل نخ رو بديد باشه سوالاي ديگه من رو سرنخ بديد)
ممنون از كمكتون...

vandermond
جمعه 12 تیر 1388, 10:32 صبح
سلام دوباره
ممنون از اينكه اين دفعه همون سر نخ رو هم به من نداديد. با اين كار من با MSDN دوست شدم (قبلا خيلي كم ازش استفاده ميكردم). اميدوارم ديگه اين دوست خوب هميشه جواب من رو بده و مجبور نباشم مزاحم شما بشم بلكه فقط بيام اينجا و جواب دوستان رو بدم. الان خيلي خوشحالم و چيزي كه فهميدم رو ميخوام اينجا بگم كه اگر كسي با اين مشكل روبرو بود بتونه استفاده كنه.
لازم نيست كه اطلاعات ديتابيس رو به صورت آرايه در بياريم بلكه ميشه با

lstView.DataContext=objDataSet
و بعد اضافه كردن

ItemsSource={Binding Path=tableName}
به lstView به راحتي هر فيلدي رو كه ميخوايم بايند كنيم. مثلا

DisplayMemberBinding="{Binding Path=fieldName}"
ببخشيد اگه اطلاعات ساده اي رو كه بدست آوردم اينجا نوشتم ولي من بعضي ها رو ميبينم كه به اينها نياز دارند. البته يه خورده هم بزاريد به حساب خوشحال شدن من كه تازه اين اطلاعات ساده رو بدست آوردم.
ممنون از همتون...

vandermond
جمعه 12 تیر 1388, 18:19 عصر
سلام
ببخشيد كه فقط من ميام اينجا. آخه هيچ كس نمياد و مجبورم خودم سوال بپرسم و بعد از اينكه از يه جايي جواب رو يافتم بيام و جواب خودم رو بدم:لبخند:

اين يكي رو لطفا جواب بديد(خواهشا):
من كاري كه ميخوام بكنم رو ميگم (تا الان داشتم برعكس كار ميكردم):
ميخوام اطلاعاتي كه كاربر در يك ListView وارد ميكنه رو با زدن يك كليد توي يك ديتابيس ذخيره كنم.همين.
حالا اينكه اين برنامه نياز به Binding داره يا نه رو نميدونم.
اگه حوصله كد نوشتن نداريد لاقل يه توضيح مختصر بديد.
من فهميدم چه طور اطلاعات ديتابيس رو تو ListView نمايش بدم ولي عكسش رو نميدونم.
لطفا كمك كنيد...


ويرايش: حالا كه جواب سوال اين تاپيك روشن شده و سوالي كه اين آخر مطرح كردم كاملا عكس سوال تاپيك ميباشد، با اجازه مديران سايت (خصوصا آقاي كياني) اين سوال را در همين تالار در تاپيك جداگانه مطرح ميكنم تا تبادل اطلاعات بهتر صورت گيرد. با اجازه...
لطفا براي جواب دادن به اين سوال مراجعه كنيد به:http://barnamenevis.org/forum/showthread.php?p=750047#post750047