PDA

View Full Version : textbox bind



Elham_ha
یک شنبه 15 مهر 1386, 13:28 عصر
سلام من یه db دارم که در فرم اون یه textbox دارم که می خوام با تغییر تکست باکس label ها متناسب با اطلاعات جدول تغییر کنن لطف کنین کمکم کنین من یه چنین کدی نوشتم ولی ایراد می گیره
privatevoid textBox8_TextChanged(object sender, EventArgs e)
{

textBox8.DataBindings.Add("Text", objDataView4, "passanger_code");
label24.DataBindings.Add("Text", objDataView4, "passanger_name");
label25.DataBindings.Add("Text", objDataView4, "passanger_family");
label26.DataBindings.Add("Text", objDataView4, "telephone_number");
label21.DataBindings.Add("Text", objDataView4, "sex");
label22.DataBindings.Add("Text", objDataView4, "mobile");
label23.DataBindings.Add("Text", objDataView4, "passanger_code");
label27.DataBindings.Add("Text", objDataView4, "address");
}
dataview و dataset و dataadapter رو اول برنامه تعریف کردم همینطور commandtext رو.
لطفا فوری جواب بدین

PC2st
یک شنبه 15 مهر 1386, 16:52 عصر
این دستورات رو در رویداد Load فرم یا متد سازنده، بنویسید.

Mahdi.Kiani
یک شنبه 15 مهر 1386, 20:24 عصر
این دستورات رو در رویداد Load فرم یا متد سازنده، بنویسید.

هیچ ربطی به این نداره که کد ها کجا نوشته بشوند
مهم اینه که درست نوشته بشوند

در مورد bind کردن textbox اگه در رویداد های کلیک دکمه و .. این کار را انجام میدین کافیه که قبل از bind کردن اونا را clear کنین

اینم یه نمونه bind کردن combobox همراه با textbox





using(SqlConnection con =new SqlConnection("server=(local);database=test;integrated security=true"))
{

try
{

SqlDataAdapter da = new SqlDataAdapter("select * From STUDENT", con);
DataTable dt = new DataTable();
da.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "stdName";
comboBox1.ValueMember = "stdId";
textBox1.DataBindings.Clear();
textBox1.DataBindings.Add("Text", dt, "stdName");



}
catch(Exception ex)
{

MessageBox.Show(ex.Message);
}
}




جدولی به نام student و فیلد هایی به نام stdId و stdname بسازید
اسم دیتابیس هم که test هست

راستی خیلی بهتره اگه مواقعی که error دریافت میکنین ،متن error را هم بذارین
اینطوری بهتر میشه فهمید مشکل از کجاست (چون شاید مشکل از جایی دیگه باشه . ربطی به bind کردن textbox ها نداشته باشه)
موفق باشید

PC2st
یک شنبه 15 مهر 1386, 21:39 عصر
هیچ ربطی به این نداره که کد ها کجا نوشته بشوند
مهم اینه که درست نوشته بشوند
یکبار دیگه کدهای ایشون رو ببینید و به textBox8 دقت کنید :-)

Mahdi.Kiani
یک شنبه 15 مهر 1386, 21:50 عصر
یکبار دیگه کدهای ایشون رو ببینید و به textBox8 دقت کنید :-)

اگه منظورتون اینه که توی text_change نوشته من نمیگم گه کار خوبی کرده
اینکه من گفتم هرجا باشه اگه درست باشه جواب میده منظورم این بود که الزاما جهت بایند کردن نباید کد ها را در رویداد load یا در constructor نوشت

اینکه دیگه برای هر کسی مسلمه که نوشتن کد در رویداد text_change وقتی که قرار ارتباطی بین دیتابیس برقرار باشه مسلما کار عاقلانه ای نیست اما خوب متاسفانه بعضا دیدم که حتی برنامه نوئیسانی که ادعای حرفه ایشون هم میشه این کار را میکنن مثلا برای جستجو ها جهت فیلتر کردن داده ها !!!!!

البته کاری که ایشون کردن و توی رویداد ذکر شده نوشتن دیگه اجازه تایپ کردن توی تکست باکس ها را ندارن چون با هر بار تغییر متن تکست باکس ها بایند میشوند

night11
یک شنبه 15 مهر 1386, 22:12 عصر
اینکه دیگه برای هر کسی مسلمه که نوشتن کد در رویداد text_change وقتی که قرار ارتباطی بین دیتابیس برقرار باشه مسلما کار عاقلانه ای نیست اما خوب متاسفانه بعضا دیدم که حتی برنامه نوئیسانی که ادعای حرفه ایشون هم میشه این کار را میکنن مثلا برای جستجو ها جهت فیلتر کردن داده ها !!!!!


میشه در این مورد بیشتر توضیح بدید ؟

hassan razavi
یک شنبه 15 مهر 1386, 22:53 عصر
به نظر من هم بهتره که از رویداد Load فرم یا متد سازنده استفادا کنند. اینجوری دیگه نیازی به Clear کردن هم نیست.
بعد بهتره که بعد از Dataset نام جدول هم ذکر بشه. به اینصورت :


textBox8.DataBindings.Add("Text", objDataView4.Table["Name"], "passanger_code");
or
textBox8.DataBindings.Add("Text", objDataView4.Table[0], "passanger_code");

Mahdi.Kiani
یک شنبه 15 مهر 1386, 23:29 عصر
میشه در این مورد بیشتر توضیح بدید ؟

کدوم یکی ؟
اینکه چرا نباید در رویداد textChange کدی نوشت (البته منظورم کد هایی بود که به نحوی با دیتا بیس ارتباط برقرار میکنند)
اگه منظورتون این بود که باید بگم خوب جوابش خیلی سادست و در واقع نکته مبهمی داخلش نیست
ویداد textChange به ازاء هر تغییری در تکست باکس fire میشه
پس صحیح نیست که بخواییم به ازاء هر کاراکتری که وارد میشه (جتی space !!!) به دیتا بیس وصل بشیم و transaction داشته باشیم
چون اصولا ارتباط با دیتابیس از اعمالی است که سربار زیادی به برنامه وارد میکنه پس باید حتی المقدور از ارتباطات و cpnnection بیجا پرهیز کنیم

اگرم منظورتون فیلتر کردنه که بگین تا توضیح بدم (البته قبلش search کنین و اگه باز مشکلی بود بگین)

Mahdi.Kiani
یک شنبه 15 مهر 1386, 23:34 عصر
به نظر من هم بهتره که از رویداد Load فرم یا متد سازنده استفادا کنند. اینجوری دیگه نیازی به Clear کردن هم نیست.
بعد بهتره که بعد از Dataset نام جدول هم ذکر بشه. به اینصورت :


textBox8.DataBindings.Add("Text", objDataView4.Table["Name"], "passanger_code");
or
textBox8.DataBindings.Add("Text", objDataView4.Table[0], "passanger_code");



بر اساس تجربه هایی که داشتم نوشتن کد های سنگین (از لحاظ زمان اجرایی) را در رویداد load فرم را رد میکنم خیلی مواقع باعث میشه که فرم به صورت کامل نشون داده نشه (البته برای چند لحظه فقط)و این یکمی از لحاظ UI به نظرم جالب نیست (البته رویداد load قبل از نمایش فرم fire میشه اما در مورد کد های سنگین مثل fill کردن datagird و ... به نظرم درست نیست البته تجربه شخصی هست)

در مورد دیتا ست هم بیشتر توصیه میکنم که با dataTable و dataView به جای دیتا ست کار کنیم
هم را حت تره و معمولا کد نویسی اون هم کم تره
به نظر من بزرگترین قابلیتی که dataset داره اینکه میشه چند تا جدول را در اون fill کرد

PC2st
دوشنبه 16 مهر 1386, 20:35 عصر
به ازاء هر کاراکتری که وارد میشه (جتی space !!!) به دیتا بیس وصل بشیم و transaction داشته باشیم
البته استفاده از DataBindings.Add باعث وصل شدن به دیتابیس نشده و تاثیری روی تراکنش ندارد. (صرف نظر از نوشتن این دستور در رویداد TextChanged)

Mahdi.Kiani
سه شنبه 17 مهر 1386, 07:23 صبح
البته استفاده از DataBindings.Add باعث وصل شدن به دیتابیس نشده و تاثیری روی تراکنش ندارد. (صرف نظر از نوشتن این دستور در رویداد TextChanged)


خط دوم پست شماره 8 را با دقت بخونید

PC2st
سه شنبه 17 مهر 1386, 20:21 عصر
خط دوم پست شماره 8 را با دقت بخونید
امان از دست بی دقتی (!) :-)