PDA

View Full Version : سوال: ویرایش اطلاعات بانک!



hadimtn
چهارشنبه 14 مرداد 1394, 15:57 عصر
سلام.

133945

برای ویرایش اطلاعات جدول، قصد دارم با انتخاب کردن سطر مد نظر، اطلاعات اون سطر رو بریزم توی TextBoxهای فرم و بعد از ویرایش عملیات ذخیره رو انجام بدم؛
این کد رو نوشتم ولی کار نمیکنه!
عنوانی که قراره ویرایش بشه دقیقاً توی بانک "Brand" ذخیره شده.

ghasem110deh
چهارشنبه 14 مرداد 1394, 16:35 عصر
سلام
مقدار ایندکس سلول دیتاگرید رو بدین بهتره :


Txt_Agent.Text = dataGridView1.SelectedCells[1].Value.ToString();

به روش خودتون هم باید اسم اون ستون رو تو گریدویو همنام اسم ش توی دیتابیس کنید ... تو قسمت edit column دیتاگریدویو

Beginner67
چهارشنبه 14 مرداد 1394, 17:02 عصر
چون میخوایید بریزید توی textbox :

f.textBox1.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
f.textBox2.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
.
.
.



f یک شی از کلاسی مربوط به صفحه ادیت که textbox داره هست.

hadimtn
شنبه 17 مرداد 1394, 22:35 عصر
هیکچدوم جواب نداد:

134041

134042

اون روشی که خودم نوشتم درسته، چون قبلاً ازش نتیجه گرفتم، الان نمیدونم چرا اجرا نمیشه!

ghasem110deh
شنبه 17 مرداد 1394, 23:31 عصر
سلام
اینو استفاده کنید : (نباید خطا بدن !)


private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
DataGridViewRow dr = dataGridView1.SelectedRows[0];
textBox1.Text = dr.Cells[0].Value.ToString();
// بجای ایندکس میشه اسم سطر رو هم نوشت !
//dr.Cells["id"].Value.ToString();
textBox2.Text = dr.Cells[1].Value.ToString();
textBox3.Text = dr.Cells[2].Value.ToString();
textBox4.Text = dr.Cells[3].Value.ToString();
}

alireza264
شنبه 17 مرداد 1394, 23:31 عصر
سلام
متن پیغام میگه که مقدار داده شده خارج از تعداد سطر های داده شده هستش . با توجه به اینکه سطر و ستون صفر رو میخونی معنیش اینه که دیتا گرید خالیه و این فرآیند قبل از پر شدنش داره رخ میده.

hadimtn
یک شنبه 18 مرداد 1394, 16:23 عصر
قبلاً با استفاده از همین کدها ویرایش میکردم؛
تو یه فرم جدید دوباره کارها رو انجام دادم مشکل اول حل شد؛
ولی دیتاگرید رو دیگه ویزاردی بایند نکردم:

var Query = db.UnitTables;
unitViewer_DataGridView.DataSource = Query;

الآن با انتخاب هر کدوم از سطرها اطلاعاتش رو میریزه تو TextBox ولی وقتی میخوام تغییرات رو ثبت کنم، نمیشه!


134069

محمد رضا فاتحی
یک شنبه 18 مرداد 1394, 16:53 عصر
متغیری که می خواین تبدیل به int کنید رشته عددی نیست...برای تست قبل از int.parse مقدار وروی رو توی یه متغیر جداگانه بریزید و چگ گنید که چی بر میگرده...

hadimtn
یک شنبه 18 مرداد 1394, 18:01 عصر
متغیری که می خواین تبدیل به int کنید رشته عددی نیست...برای تست قبل از int.parse مقدار وروی رو توی یه متغیر جداگانه بریزید و چگ گنید که چی بر میگرده...

ببخشید، اشتباه شد، به جای unitName باید ID رو مینوشتم!

134094

خطای اصلی اینه:
134093

hadimtn
یک شنبه 18 مرداد 1394, 21:31 عصر
در کل میخوام با کلیک بر روی یک سطر از دیتاگرید اطلاعات اون رو ویرایش کنم!
البته نه توسط خود دیتا گرید! داده ها رو بریزه توی TextBox ویرایش/حذف رو انجام بدم و تغییرات رو ذخیره کنم!
لطفاً راهنمایی کنید!

محمد رضا فاتحی
یک شنبه 18 مرداد 1394, 21:55 عصر
اینم که متن خطاش مشخصه....توی گریدی که دارید کار می کنید ستونی به نام unitName وجود نداره

شهرام فرخنده
یک شنبه 18 مرداد 1394, 22:16 عصر
سلام دوست عزیز من داخل پروژه ام اینجوری استفاده کرذم ببین به دردت میخوره


private void button4_Click(object sender, EventArgs e)
{
try
{
MemoryStream ms = new MemoryStream(); // io قرار دارد در
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrImage = ms.GetBuffer();
ms.Close();
con.Open();
String m = "";
m = textBox5.Text;
String n = "";
n = textBox4.Text;
int a = Convert.ToInt32(t1.Text);
int b = Convert.ToInt32(t4.Text);
int d = Convert.ToInt32(t7.Text);
int c = a + 10;
if (textBox4.Text == "" || textBox5.Text == "" || textBox2.Text == "" || textBox1.Text == "" || textBox4.Text.Length > 20 || textBox4.Text.Length < 9 || textBox11.Text.Length < 11 || textBox11.Text.Length > 11 || textBox5.Text.Length > 10 || textBox5.Text.Length < 10 || c > b || m == "0000000000" || m == "1111111111" || m == "2222222222" || m == "3333333333" || m == "4444444444" || m == "55555555555" || m == "6666666666" || m == "7777777777" || m == "8888888888" || m == "9999999999" || n == "0000000000" || n == "1111111111" || n == "2222222222" || n == "3333333333" || n == "4444444444" || n == "55555555555" || n == "6666666666" || n == "7777777777" || n == "8888888888" || n == "9999999999")
{
// if (c > b)
// MessageBox.Show("بسیجی مورد نظر به دلیل کامل نبودن مشخصات یا صحیح وارد نکردن مقادیر ثبت نشد" + "\n باید بین تاریخ تولد و تاریخ عضویت عادی 10 سال منظور گردد" + "\n باید بین تاریخ عضویت غعال و تاریخ عضویت عادی حداقل 1 سال منظور گردد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Warning);
// else
MessageBox.Show("بسیجی مورد نظر به دلیل کامل نبودن مشخصات یا صحیح وارد نکردن مقادیر ثبت نشد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Warning);
con.Close();
}
else
{
//.................................................. .........
// SqlCommand cm = new SqlCommand("insert into basig(codbas,name,fname,namefa,codmali,nameh,namep ,status,yeartavalod,monthtavalod,daytavalod,yearoz vait,monthozvait,dayozvait,addres,pic)values(@1,@2 ,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13,@14,@15,@16)");
SqlCommand cm = new SqlCommand("update basig set name=@2 , fname=@3, namefa=@4, codmali=@5 ,nameh=@6 , namep=@7 , status=@8 , yeartavalod=@9 , monthtavalod=@10 ,daytavalod=@11 ,yearozvait=@12 ,monthozvait=@13 ,dayozvait=@14 ,addres=@15, pic=@16 ,yearfaal=@17 ,monthfaal=@18 ,dayfaal=@19 ,masolit=@20 ,madrak=@21, tel=@22 where codbas= '" + dataGridView1.CurrentRow.Cells[0].Value.ToString() + "'", con);
cm.Connection = con; //codstu=@1 ,
//cm.Parameters.AddWithValue("@1", textBox4.Text);
cm.Parameters.AddWithValue("@2", textBox1.Text);
cm.Parameters.AddWithValue("@3", textBox2.Text);
cm.Parameters.AddWithValue("@4", textBox3.Text);
cm.Parameters.AddWithValue("@5", textBox5.Text);
cm.Parameters.AddWithValue("@6", comboBox1.Text);
cm.Parameters.AddWithValue("@7", comboBox2.Text);
cm.Parameters.AddWithValue("@8", comboBox3.Text);
cm.Parameters.AddWithValue("@9", t1.Text);
cm.Parameters.AddWithValue("@10", t2.Text);
cm.Parameters.AddWithValue("@11", t3.Text);
cm.Parameters.AddWithValue("@12", t4.Text);
cm.Parameters.AddWithValue("@13", t5.Text);
cm.Parameters.AddWithValue("@14", t6.Text);
cm.Parameters.AddWithValue("@15", textBox6.Text);
cm.Parameters.AddWithValue("@16", SqlDbType.Binary).Value = arrImage;
cm.Parameters.AddWithValue("@17", t7.Text);
cm.Parameters.AddWithValue("@18", t8.Text);
cm.Parameters.AddWithValue("@19", t9.Text);
cm.Parameters.AddWithValue("@20", comboBox7.Text);
cm.Parameters.AddWithValue("@21", comboBox5.Text);
cm.Parameters.AddWithValue("@22", textBox11.Text);
cm.ExecuteNonQuery();
MessageBox.Show("ویرایش مشخصات بسیجی مورد نظر با موفقیت ثبت شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
frm_basignew_Load(sender, e);
button1.Enabled = true;
dataGridView1.Enabled = true;
groupBox4.Enabled = true;
}
}

catch
{
MessageBox.Show("در به روز رسانی اطلاعات بسیجی مورد نظر مشکلی به وجود آمده است" + "\nکد بسیجی و کد ملی را چک کنید تا تکراری نباشد\n\nمحل وقوع خطا\nForm basig --> button4 \n\n برنامه به صورت اتوماتیک بسته خواهد شد لطفا دوباره سعی کنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
}

}

hadimtn
دوشنبه 19 مرداد 1394, 00:16 صبح
اینم که متن خطاش مشخصه....توی گریدی که دارید کار می کنید ستونی به نام unitName وجود نداره
چرا هست:

134103

:متفکر:

hadimtn
دوشنبه 19 مرداد 1394, 00:17 صبح
سلام دوست عزیز من داخل پروژه ام اینجوری استفاده کرذم ببین به دردت میخوره

ممنون ولی من از LINQ استفاده میکنم!

hadi vafaii
دوشنبه 19 مرداد 1394, 01:56 صبح
ممنون ولی من از LINQ استفاده میکنم!

سلام ببینین اینجوری میشه



private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.RowCount > 0)
{

var Fr = new Form2();
Fr.txtname.Text = dataGridView1.CurrentRow.Cells["name"].Value.ToString();

Fr.ShowDialog();
var DB = new BbLINQDataContext();
dataGridView1.DataSource = DB.Table1s;
}

hadimtn
دوشنبه 19 مرداد 1394, 02:57 صبح
سلام ببینین اینجوری میشه
نه !
جواب نداد!
حرف VS یه کلامه:
ستون unitName رو پیدا نمیکنم!
:لبخندساده:

rg_BlackRose
دوشنبه 19 مرداد 1394, 19:48 عصر
چرا هست:

134103

:متفکر:

سلام

تو عکسی که قرار دادین "unaitName" نوشته سر ستون هست، در صورتی که نام ستون"unitNameDataGridViewTextBox" هست.


txt_EditUnit.Text = unitViewer_DataGridView.CurrentRow.Cells["unitName"].Value.ToString();


رو به این صورت تغییر بدین.

txt_EditUnit.Text = unitViewer_DataGridView.CurrentRow.Cells["unitNameDataGridViewTextBox"].Value.ToString();



موفق باشید.

hadimtn
سه شنبه 20 مرداد 1394, 01:46 صبح
تو عکسی که قرار دادین "unaitName" نوشته سر ستون هست، در صورتی که نام ستون"unitNameDataGridViewTextBox" هست.
سلام. ممنون از پاسخگویی شما! اما نشد ...
مگه این دستوری که بنده نوشتم مربوط به DataProprtyName نیست؟! اون چیزی هم که شما اشاره کردین تو قسمت Design قرار گرفته... !!!!
من مطمئنم قبلاً که کار میکردم از همون نامی که تو جدول استفاده کرده بودم، استفاده میکردم!

نمیدونم الان چرا نمیشناسه! :متفکر:

rg_BlackRose
سه شنبه 20 مرداد 1394, 16:25 عصر
سلام



مگه این دستوری که بنده نوشتم مربوط به DataProprtyName نیست؟!


وقتی از DataTable استفاده کنید، اونموقع نامی که استفاده میکنید برای گرفتن اطلاعات فیلد باید نام ستون جدول در دیتابیس باشه. ولی شما در کدهاتون مستقیم به خود DataGridView اشاره میکنید و از فیلدهای اون میخواید اطلاعات بگیرید. که در اینصورت باید از ایندکس ستون اون و یا نام ستونش استفاده کنید.

یک تست ساده انجام بدید و بعد از پر کردن جدول، از کدهای زیر برای تست کردن نام ستونهای دیتاگریدویو استفاده کنید تا مطمئن بشید نامی که استفاده میکنید درسته.
کدهای زیر رو بعد از پر شدن دیتاگریدویو قرار بدید و برنامه رو اجرا کنید.

foreach(DataGridViewColumn clmn in dataGridView1.Columns)
{
MessageBox.Show(string.Format("The Name of Column index ({0}) is {1}", clmn.Index, clmn.Name));
}


موفق باشید.

hadimtn
چهارشنبه 21 مرداد 1394, 02:49 صبح
یک تست ساده انجام بدید و بعد از پر کردن جدول، از کدهای زیر برای تست کردن نام ستونهای دیتاگریدویو استفاده کنید تا مطمئن بشید نامی که استفاده میکنید درسته.
کدهای زیر رو بعد از پر شدن دیتاگریدویو قرار بدید و برنامه رو اجرا کنید.

سلام. دقیقاً از نام های جدول استفاده میکنه! یعنی همون unitName رو برای فیلد مذکور برمیگردونه!

hadimtn
چهارشنبه 21 مرداد 1394, 02:52 صبح
(برای دوستان که احتمالاً این مشکل براشون پیش میاد)
مشکل وقتی وجود داره که بانک رو به صورت ویزاردی به DataGridView وصل میکنم!
با LINQ مشکل حل شد:

DataClasses1DataContext db = new DataClasses1DataContext();
private void EditForm_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = db.UnitTables;
}


private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
txt_UnitName.Text = dataGridView1.CurrentRow.Cells["unitName"].Value.ToString();
}


private void btn_Edit_Click(object sender, EventArgs e)
{
int ID_Index = int.Parse(dataGridView1.CurrentRow.Cells["ID"].Value.ToString());
var Query = db.UnitTables.Where(c => c.ID == ID_Index).Single();
Query.Name = txt_UnitName.Text;
db.SubmitChanges();
dataGridView1.DataSource = db.UnitTables;
}
برای تغییر نام ستون ها پس از پر شدن DataGridView هم باید به شکل زیر عمل کنیم:
dataGridView1.Columns[0].HeaderCell.Value = "واحد شمارش";

.

از همه ی دوستان تشکر میکنم!