PDA

View Full Version : ارسال نتیجه جستجو به textbox



mohammad2407
پنج شنبه 15 فروردین 1392, 04:43 صبح
سلام دوستان عزیز من به وسیله کد زیر جستجو میکنم و بعد نتیجه رو در دیتا گرید چاپ میکنم حالا میخوام در textbox های مربوط به هر فیلد اطلاعات چاپ بشه


string srch = txtserch.Text;
var db = new tahvilDataContext();
db.tahvils.ToString();
if (srch == "")
{
dataGridView1.DataSource = db.tahvils;
return;
}

var query = db.tahvils.Where(c => c.Name.Contains(srch) || c.LastName.Contains(srch) || c.rhg.ToString().Contains(srch));
if (query.Count() == 0)
{

PMessageBox.Show(" هیچ داده ای یافت نشد ", "پیام سیستم ", PMessageBoxButtons.OK, PMessageBoxIcons.Warning);
}
else
{
dataGridView1.DataSource = query;//bining

}


به وسیله کد زیر اطلاعات در دیتا گرید چاپ میکنم


dataGridView1.DataSource = query;//bining


حالا میخوام در textbox های مربوط به خودشون قرار بگیرن

ممنون میشم راهنمایی کنید

mohammad2407
پنج شنبه 15 فروردین 1392, 15:57 عصر
دوستان میشه راهنمایی کنید

khokhan
پنج شنبه 15 فروردین 1392, 16:07 عصر
دوستان میشه راهنمایی کنید
درود بر شما

در فرم شماره 3 این نمونه اطلاعات در textbox ها نشان داده می شوند و می تونید فیلد بعدی وفیلد قبلی رو هم پیمایش کنین

شاد شاد :لبخند:

mohammad2407
پنج شنبه 15 فروردین 1392, 17:22 عصر
ممنونم دوست من ولی من دارم از LINQ استفاده میکنم کد شما ADO.NET هست

باز هم تشکر

Mahmoud.Afrad
پنج شنبه 15 فروردین 1392, 18:20 عصر
میتونی از رویداد rowenter گریدویو استفاده کنی و اطلاعات سطر سلکت شده رو به تکست باکسها بفرستی.

و یا

از DataBinding کنترل ها استفاده کنی.
مثال:

var result = context.tbls.ToList();
BindingList<tbl> tblBindingList = new BindingList<tbl>(result);

txtFirstName.DataBindings.Clear();
txtLastName.DataBindings.Clear();

txtFirstName.DataBindings.Add("Text", tblBindingList, "firstname");
txtLastName.DataBindings.Add("Text", tblBindingList, "lastname");
dataGridView1.DataSource = tblBindingList;

mohammad2407
پنج شنبه 15 فروردین 1392, 18:32 عصر
اقا محمود من در این فرمم دیگه نمیخوام از dataGridView استفاده کنم میخوام یک شماره وارد کنم بره جستجو کنه اگر بود اون رکورد در تکست باکس های مربوط به خودشون بریزه

دیتا گرید در این فرم وجود نداره !

عکس فرم من
http://up.vbiran.ir/uploads/13650862075281_Untitled.png

Mahmoud.Afrad
پنج شنبه 15 فروردین 1392, 18:53 عصر
باز هم فرقی نمیکنه میتونی از بایندینگ استفاده کنی.
انتهای کوئری FirstOrDefault رو اضافه کن تا فقط یک شئ دریافت بشه. اگر null نبود بایند کن و اگر null بود پیغام بده یافت نشد. بایندینگ خاصیتی که داره با تغییر متن تکست باکسها مقدار پراپرتی های شئ هم تغییر میکنه. در دکمه ثبت هم کافیه مدل را SubmitChanges کنی.

private void button1_Click(object sender, EventArgs e)
{
txtFirstName.DataBindings.Clear();
txtLastName.DataBindings.Clear();

var result = context.tbls.Where(item => item.id == Convert.ToInt32(textBox2.Text)).FirstOrDefault();
if (result != null)
{
txtFirstName.Enabled = txtLastName.Enabled = true;
txtFirstName.DataBindings.Add("Text", result, "firstname");
txtLastName.DataBindings.Add("Text", result, "lastname");
}
else
{
txtFirstName.ResetText();
txtLastName.ResetText();
txtFirstName.Enabled = txtLastName.Enabled = false;
MessageBox.Show("یافت نشد");
}
}

private void button2_Click(object sender, EventArgs e)
{
// ثبت تغییرات دکمه ویرایش
context.SubmitChanges();
}

mohammad2407
پنج شنبه 15 فروردین 1392, 19:38 عصر
اقا محمود کد ویرایش من ای دی از دیتا گرید میگیره اینجا به چه شکل میشه


string _name = txtname.Text;
string _lastname = txtlastname.Text;
string _car = txtcar.Text;
string _shnamber = txtshnamber.Text;
string _Datetahvil = txtdate.Text;
string _des = txtdes.Text;
var db = new tahvilDataContext();//ling to SQL new ccn
int selectionchange_index_id = int.Parse(dataGridView1.CurrentRow.Cells["id"].Value.ToString());
var query = db.tahvils.Where(c => c.id == selectionchange_index_id).Single();
query.Name = _name;
query.LastName = _lastname;
query.Car = _car;
query.SHNamber = _shnamber;
query.tarikh = _Datetahvil;
query.Description = _des;
db.SubmitChanges();

mohammad2407
پنج شنبه 15 فروردین 1392, 20:04 عصر
اقا محمود من اول یک شماره سرچ میکنم و بعد میریزم داخل تکس باکس ها توسط کد زیر

کد سرچ :


var db = new anbardariDataContext();
anbar tb = new anbar();
string srch = txtserch.Text;
codetype.DataBindings.Clear();
namberfani.DataBindings.Clear();
kalaname.DataBindings.Clear();
addres.DataBindings.Clear();
vazeyat.DataBindings.Clear();
barcode.DataBindings.Clear();



var result = db.anbars.Where(c => c.namberfani.Contains(srch) || c.barcode.Contains(srch)).FirstOrDefault();
if (result != null)
{
groupBox2.Enabled = true;
codetype.Enabled = namberfani.Enabled = kalaname.Enabled = addres.Enabled = vazeyat.Enabled = barcode.Enabled = true;
codetype.DataBindings.Add("Text", result, "codetype");
namberfani.DataBindings.Add("Text", result, "namberfani");
kalaname.DataBindings.Add("Text", result, "kalaname");
addres.DataBindings.Add("Text", result, "addres");
vazeyat.DataBindings.Add("Text", result, "vazeyat");
barcode.DataBindings.Add("Text", result, "barcode");
}
else
{
codetype.ResetText();
namberfani.ResetText();
kalaname.ResetText();
addres.ResetText();
vazeyat.ResetText();
barcode.ResetText();

codetype.Enabled = namberfani.Enabled = kalaname.Enabled = addres.Enabled = vazeyat.Enabled = barcode.Enabled = false;
PMessageBox.Show("کالای مورد نظر شما در انبار موجود نیست.");
}


با کد بالا از دیتا بیس اطلاعات خوندم

حالا اطلاعات در تکست باکس ها هستن و باید ویرایش بشن

تغییرات در اطلاعات دادیم و میخوایم ثبت کنیم

کد ویرایش من که در دکمه ویرایش قرار میگیره


string _name = txtname.Text;
string _lastname = txtlastname.Text;
string _car = txtcar.Text;
string _shnamber = txtshnamber.Text;
string _Datetahvil = txtdate.Text;
string _des = txtdes.Text;
var db = new tahvilDataContext();//linq to SQL new ccn
int selectionchange_index_id = int.Parse(dataGridView1.CurrentRow.Cells["id"].Value.ToString());
var query = db.tahvils.Where(c => c.id == selectionchange_index_id).Single();
query.Name = _name;
query.LastName = _lastname;
query.Car = _car;
query.SHNamber = _shnamber;
query.tarikh = _Datetahvil;
query.Description = _des;
db.SubmitChanges();




ولی خب کد بالا ایراد داره

Mahmoud.Afrad
پنج شنبه 15 فروردین 1392, 20:35 عصر
شئ db را در سطح کلاس تعریف کن تا بتونی از همین شئ بعدا استفاده کنی:

anbardariDataContext db;

public FrmEdit()
{
InitializeComponent();

db = new anbardariDataContext();
}

منظور از public FrmEdit() سازنده فرم هست.

کد سرچ به اینصورت درمیاد:

string srch = txtserch.Text;
codetype.DataBindings.Clear();
namberfani.DataBindings.Clear();
kalaname.DataBindings.Clear();
addres.DataBindings.Clear();
vazeyat.DataBindings.Clear();
barcode.DataBindings.Clear();

var result = db.anbars.Where(c => c.namberfani.Contains(srch) || c.barcode.Contains(srch)).FirstOrDefault();
if (result != null)
{
groupBox2.Enabled = true;
codetype.DataBindings.Add("Text", result, "codetype");
namberfani.DataBindings.Add("Text", result, "namberfani");
kalaname.DataBindings.Add("Text", result, "kalaname");
addres.DataBindings.Add("Text", result, "addres");
vazeyat.DataBindings.Add("Text", result, "vazeyat");
barcode.DataBindings.Add("Text", result, "barcode");
}
else
{
codetype.ResetText();
namberfani.ResetText();
kalaname.ResetText();
addres.ResetText();
vazeyat.ResetText();
barcode.ResetText();

groupBox2.Enabled = false;
PMessageBox.Show("کالای مورد نظر شما در انبار موجود نیست.");
}


کد دکمه ویرایش هم یک خطه:

db.SubmitChanges();

mohammad2407
پنج شنبه 15 فروردین 1392, 20:43 عصر
اقا محمود من در دکمه ویرایش کد زیر قرار دادم ولی تغییری صورت نگرفت

db.SubmitChanges();

mohammad2407
پنج شنبه 15 فروردین 1392, 20:49 عصر
اقا محمود این کل کد فرم من هست از اول تا آخر :لبخند:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PersianMessageBox;

namespace Irankhodro_Anbar
{
public partial class Form3 : Form
{
anbardariDataContext db;
public Form3()
{
InitializeComponent();
db = new anbardariDataContext();
}

private void button2_Click(object sender, EventArgs e)/////////////دکمه جستجو
{
var db = new anbardariDataContext();
anbar tb = new anbar();
string srch = txtserch.Text;
codetype.DataBindings.Clear();
namberfani.DataBindings.Clear();
kalaname.DataBindings.Clear();
addres.DataBindings.Clear();
vazeyat.DataBindings.Clear();
barcode.DataBindings.Clear();



var result = db.anbars.Where(c => c.namberfani.Contains(srch) || c.barcode.Contains(srch)).FirstOrDefault();
if (result != null)
{
groupBox2.Enabled = true;
codetype.Enabled = namberfani.Enabled = kalaname.Enabled = addres.Enabled = vazeyat.Enabled = barcode.Enabled = true;
codetype.DataBindings.Add("Text", result, "codetype");
namberfani.DataBindings.Add("Text", result, "namberfani");
kalaname.DataBindings.Add("Text", result, "kalaname");
addres.DataBindings.Add("Text", result, "addres");
vazeyat.DataBindings.Add("Text", result, "vazeyat");
barcode.DataBindings.Add("Text", result, "barcode");
}
else
{
codetype.ResetText();
namberfani.ResetText();
kalaname.ResetText();
addres.ResetText();
vazeyat.ResetText();
barcode.ResetText();

codetype.Enabled = namberfani.Enabled = kalaname.Enabled = addres.Enabled = vazeyat.Enabled = barcode.Enabled = false;
PMessageBox.Show("کالای مورد نظر شما در انبار موجود نیست.");
}
}

private void Form3_Load(object sender, EventArgs e)
{
groupBox2.Enabled = false;
}

private void button1_Click(object sender, EventArgs e)/////////////// دکمه خروج
{
Close();
}

private void button3_Click(object sender, EventArgs e)/////////////دکمه ویرایش
{

db.SubmitChanges();

}

}
}

C#‎_best_Programmer
پنج شنبه 15 فروردین 1392, 20:55 عصر
یونس اسم قحطی بو ناگهانی:لبخند:

Mahmoud.Afrad
جمعه 16 فروردین 1392, 01:34 صبح
این دو خط نیاز نیست برای چی اضافه کردی؟!!

var db = new anbardariDataContext();
anbar tb = new anbar();


قراره از db که در سطح کلاس تعریف شده استفاده بشه پس دیگه نیازی به ساختنش نیست. اون tb هم اصلا استفاده نشده!!

mohammad2407
جمعه 16 فروردین 1392, 04:18 صبح
اقا محمود دستت درد نکنه بله خیلی عالی ویرایش میکنه

حالا اقا محمود اگر بخوایم حذف کنیم یک رکوردو به چه صورت میشه در این روش ؟

یعنی باید به جای
db.SubmitChanges();

چی قرار بدیم

یا کلا فرق میکنه

Mahmoud.Afrad
جمعه 16 فروردین 1392, 15:37 عصر
چون یکبار برای جستجو کوئری زده میشه دیگه نیازی نیست زمان حذف هم جستجو کرد. کافیه result را از نوع anbar در سطح کلاس تعریف کنی و کوئری را بهش نسبت بدی.

anbardariDataContext db;
anbar result;
public Form3()
{
InitializeComponent();
db = new anbardariDataContext();
}

private void button2_Click(object sender, EventArgs e)/////////////دکمه جستجو
{
// ...
result = db.anbars.Where(c => c.namberfani.Contains(srch) || c.barcode.Contains(srch)).FirstOrDefault();
// ...
}


برای حذف هم کافیه همین result را حذف کنی:

if (result != null)
{
db.anbars.DeleteOnSubmit(result);
db.SubmitChanges();
result = null;
}

mohammad2407
یک شنبه 18 فروردین 1392, 03:01 صبح
اقا محمود الان متوجه یه مشکلی شدم در حذف کردن

وقتی کوئری زده میشه و اطلاعات به تکس باکس ها داده میشه و بعد روی دکمه کلیک میکنم تا اطلاعات حذف کنه ، خیلی عالی حذف میکنه

ولی اگر از دوباره یک کوئری دیگه زده بشه سریع برنامه بسته میشه و از خط

codetype.DataBindings.Add("Text", result, "codetype");

ایراد میگیره

مگر این که اون فرم ببندم و دوباره باز کنم تا بدون هیچ مشکلی کار کنه

mohammad2407
یک شنبه 18 فروردین 1392, 03:13 صبح
اقا محمود مشکل حل شد یادم رفته بود DataBindings هر تکس باکس Clear کنم باز هم ممنون

mohammad2407
سه شنبه 27 فروردین 1392, 23:40 عصر
اقا محمود یک مشکل جدید در قسمت ویرایش پیش امده برام

وقتی اطلاعات جدید در تکس باکس ها میریزم تمام فیلد ها بدون هیچ مشکلی ویرایش میشن ولی فیلد قیمت تغییر نمیکنه هر تغییری میدم همون اطلاعاتی ذخیره میکنه که قبلا در ثبت دادیم

با کد زیر جستجو میکنم و بعد میریزم داخل تکس باکس ها :


string srch = txtserch.Text;
var result = db.anbars.Where(c => c.namberfani==srch || c.barcode==srch).FirstOrDefault();
if (result != null)
{
groupBox2.Enabled = true;

codetype.DataBindings.Add("Text", result, "codetype");
namberfani.DataBindings.Add("Text", result, "namberfani");
kalaname.DataBindings.Add("Text", result, "kalaname");
addres.DataBindings.Add("Text", result, "addres");
vazeyat.DataBindings.Add("Text", result, "vazeyat");
textBox1.DataBindings.Add("Text", result, "Price");
barcode.DataBindings.Add("Text", result, "barcode");
button2.Enabled = false;
txtserch.DataBindings.Clear();


}
else
{
PMessageBox.Show("کالای مورد نظر شما در انبار موجود نیست.");
cleyrtxt();
cleardata();
}


و با کد زیر هم تغییرات ذخیره میکنم

db.SubmitChanges();

مثلا وقتی که در تکس باکس قیمت هستم و ویرایش انجام میدم و بعد از تکس باکس خارج میشم و وارد تکس باکس دیگه ای میشم قیمت برمیگرده به همون قبلی ( خیلی عجیبه :متعجب:) برای همن هم هست که تغییرات ذخیره نمیشن

نمیدونم چرا اینجوری شده

Mahmoud.Afrad
چهارشنبه 28 فروردین 1392, 00:00 صبح
textBox1.DataBindings.Add("Text", result, "Price", true, DataSourceUpdateMode.OnValidation);
OnValidation باعث میشه هنگام خروج مقدار پراپرتی result اصلاح بشه که میتونی تغییرش بدی.

mohammad2407
چهارشنبه 28 فروردین 1392, 00:28 صبح
اقا محمود 100 درصد درست شد ولی اگر تکس باکس خالی باشه یعنی اون چیزی که هست پاک کنیم . مکان نما دیگه از اون تکس باکس خارج نمیشه و کلید ها هم کار نمیکنن

حتما باید یه چیزی بنویسیم که اجازه جابه جایی مکان نما و... بده

یعنی نمیتونیم تکس باکس به صورت خالی ذخیره کنیم

Mahmoud.Afrad
چهارشنبه 28 فروردین 1392, 00:52 صبح
میتونی از DataBinding استفاده نکنی. مقدار رو بریز داخل تکست باکس و موقع آپدیت اگر خالی بود 0 یا null ذخیره کنی:

anbar result;
private void button1_Click(object sender, EventArgs e)
{
string srch = txtserch.Text;
result = db.anbars.Where(c => c.namberfani == srch || c.barcode == srch).FirstOrDefault();
if (result != null)
{
groupBox2.Enabled = true;

codetype.DataBindings.Add("Text", result, "codetype");
namberfani.DataBindings.Add("Text", result, "namberfani");
kalaname.DataBindings.Add("Text", result, "kalaname");
addres.DataBindings.Add("Text", result, "addres");
vazeyat.DataBindings.Add("Text", result, "vazeyat");
textBox1.Text = Convert.ToString(result.Price);
barcode.DataBindings.Add("Text", result, "barcode");
button2.Enabled = false;
txtserch.DataBindings.Clear();
}
else
{
PMessageBox.Show("کالای مورد نظر شما در انبار موجود نیست.");
cleyrtxt();
cleardata();
}
}

دکمه ذخیره:

if (textBox1.Text == string.Empty)
{
result.Price = 0; // or null
}
else
{
result.Price = decimal.Parse(textBox1.Text);
}
db.SubmitChanges();

mohammad2407
چهارشنبه 28 فروردین 1392, 00:59 صبح
اقا محمود اگر خالی باشه اصلا دکمه ذخیره کار نمیکنه که کد زیر اجرا بشه

if (textBox1.Text == string.Empty)
{
result.Price = 0; // or null
}
else
{
result.Price = decimal.Parse(textBox1.Text);
}
db.SubmitChanges();



یعنی هر چقدر روش کلیک میکنی عملیاتی انجام نمیشه !!:لبخند:

Mahmoud.Afrad
چهارشنبه 28 فروردین 1392, 01:32 صبح
گفتم در مورد textBox1 از Databinding استفاده نکن. پست 22 خط 15.