PDA

View Full Version : سوال: ذخیره همه ردیفهای DataGridView در Database



sasanrstm
چهارشنبه 16 مرداد 1392, 02:03 صبح
سلام به همه دوستان من میخوام همه اطلاعات دیتا گرید ویو رو در دیتابیس ذخیره کنم اما هرکاری میکنم فقط یه سطر از دیتا تو جدول ذخیره میشه کد هاشو میزارم اینجا لطف کنید وراهنمائی کنید البته ورود اطلاعات هم در خودت دیتا گرید صورت میگیره یه دیتاگرید گذاشتم تو صفحه وتوش اطلاعات واد میکنم حالا میخوام ذخیرش کنم همه سطر وستونهارو اما فقط یه سطرش ذخیره میشه.


try
{
if (txtNme.Text == "")
{
MessageBox.Show("فیلدهارا پر کنید");


con = new SqlConnection(d);
com = new SqlCommand();
con.Open();
com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "Daryaft2";
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
com.Parameters.Add("@N_Froshande", SqlDbType.NVarChar).Value = txtNme.Text.ToString();
com.Parameters.Add("@Nkala", SqlDbType.NVarChar).Value = dataGridView1.Rows[i].Cells[0].Value;
com.Parameters.Add("@Tedad", SqlDbType.BigInt).Value = dataGridView1.Rows[i].Cells[1].Value;
com.Parameters.Add("@Mablagh", SqlDbType.BigInt).Value = dataGridView1.Rows[i].Cells[2].Value;
com.Parameters.Add("@Total", SqlDbType.BigInt).Value = dataGridView1.Rows[i].Cells[3].Value;
com.ExecuteNonQuery();
con.Close();
MessageBox.Show("اطلاعات ثبت شد");
}
}

catch (Exception e)
{
MessageBox.Show(e.Message);

}

esafb52
چهارشنبه 16 مرداد 1392, 02:20 صبح
اینو بعد از none کوئری بذار ببین چی میشه
cmd.Parameters.Clear();
اینا رو هم ببیر بیرون از حلقه
con.Close(); MessageBox.Show("اطلاعات ثبت شد");

sasanrstm
جمعه 18 مرداد 1392, 16:26 عصر
ممنون دوست خوبم از راهنمائیت الانم دوتا خطا میده برنامم یکیش اینه که بیشتراز سه ردیف تو جدول ذخیره نمیشه و یکی اینکه من یه کد تو keydown نوشتم که دوتا سلول را رد هم ضرب کنه تو سلول سوم نشون بده تو ردیف چهارم دیتا گرید عمل نمیکنه این کد یعنی دوتا ستون حاصلضربش نشون داده نمیشه کد key down [

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
try
{
long su = 0;

long sum = 0;
long sum1 = 0;
if (e.KeyCode == Keys.Tab)
{
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
if (dataGridView1.Rows[i].Cells[i].Value != null)
{

dataGridView1.Rows[i].Cells["Total"].Value = long.Parse(dataGridView1.Rows[i].Cells["Tedad"].Value.ToString()) * long.Parse(dataGridView1.Rows[i].Cells["Mablagh"].Value.ToString());
//su += Convert.ToInt64(dataGridView1.Rows[i].Cells["Tedad"].Value.ToString());
//textBox1.Text = su.ToString();
//sum1 += Convert.ToInt64(dataGridView1.Rows[i].Cells["Total"].Value.ToString());
//txtJame.Text = sum1.ToString();
}
catch
}
{



وخطائی که میده هنگام ذخیره کردن
procdure or function daryaft2 expects prametr @Total which was not supplied

sasanrstm
جمعه 18 مرداد 1392, 22:44 عصر
کسی بلد نیست اهنمائی کنه

parvizwpf
جمعه 18 مرداد 1392, 22:56 عصر
procdure or function daryaft2 expects prametr @Total which was not supplied
یعنی یه پارامتر داری توی استورت بنام toal که مقادری بهش پاش نمیدی.
در مورد مشکل اولتون من میگم اینطوری عمل کنیدیعنی این استرینگ رو بسازید آخرش فقط یکبار execute کنید:

insert into tablex values(
'1',
'2',
'3',
'4'
)

sasanrstm
شنبه 19 مرداد 1392, 00:31 صبح
procdure or function daryaft2 expects prametr @Total which was not supplied
یعنی یه پارامتر داری توی استورت بنام toal که مقادری بهش پاش نمیدی.
در مورد مشکل اولتون من میگم اینطوری عمل کنیدیعنی این استرینگ رو بسازید آخرش فقط یکبار execute کنید:

insert into tablex values(
'1',
'2',
'3',
'4'
)

راستش من اصلا منظور شما رو متوجه نشدم که چیکار باید بکنم میشه لطفا کد کاملشو بزاری در ضمن سوال دیگری منو دقت نکردین کلا از ردیف 3 به بعد کدی که نوشتم برای ضرب دو جدول کار نمیکنه واسه همین هم فکر کنم از ردیف 3 به بعد دیگه تو جدول ذخیره نمیشه چون شرط گذاشتم اگه سلول پر باشه سیو بشه

parvizwpf
شنبه 19 مرداد 1392, 00:46 صبح
یعنی بیشتر از 3 سطر دارید ولی ثبت نمیشه و اون محاسبه انجام نمیشه آخه یه ایف هم دارید فکر نمیکنید اون مشکل ساز شده یا جایی دیتای خالی دارید؟ ضمنا اصلا رخداد خوبی انتخاب نکردید keydown جالب نیست. من دقیقا نمیدونم کی باید ثبت و محاسبات انجام بشه. کی؟
منظورم از این اینه که بجای مثلا 20 بار اکزکیوت دستور بیاید مثل من اون قالب رو بسازید یعنی تو اون فور بیاید این شکل دستور ای دی او رو با اطلاعات گریدتون بسازید(پردازش رشته میخواد) بعد آخر کل اون دستور که ساختید فقط با یه اکزکیوت اجرا کنید تا همش ثبت شه.

sasanrstm
شنبه 19 مرداد 1392, 01:02 صبح
خب راستش تو key down گفتم که اگه دگمه tab فشرده شد عملیات ضرب انجام بشه بشرطی که سلول ها خالی نباشند این کد درست کار میکنه تا ردیف3 تو ردیف 4می کد کار نمیکنه فکر کنم چون شرط گذاشتم که اگه فیلد ها پر باشه ذخیره بشه آره بیشتر از 3 ردیف هست بستگی به خرید مشتری داره دیگه شاید 10 نوع جنس خواست بخره فکر کنم اگه مشگل ضرب دوسلول حل بشه مشگل ذخیره کردن هم حل بشه به نظرم.راستش روش اینضرت که شما فرمودین رو کامل متوجه نشدم آخه فقط همون روش معمولی رو بلدم چطوری باید بنویسم میشه کد کاملشو برام بزاری ممنون میشم

parvizwpf
شنبه 19 مرداد 1392, 01:08 صبح
شما اول بمن بگو کی میخوای اون دو تا کار انجام بشن؟ یعنی کی دیتاگرید دیتا ثبت کنه؟ کی داده های گرید ضرب بشن؟ همشون باید با هم ضرب شن؟

sasanrstm
شنبه 19 مرداد 1392, 01:52 صبح
یه مثال بزنم اگه با نرم افزار هلو کا کرده باشی اونجا بعداز ورود اطالاعات در سلول با زدون دگمه اینتر عملیات ضرب انجام میشه اما من میخوام با زدن دگمه تب اینکار انجام بشه یعنی با حرکت دگمه تب پیش میرویم تو سلولها یه چیزی شبیه نرم افزار هلو اگه بشه با همون دگمه تب که جلو میریم اطلاعات ثبت بشه یا بوسیله یه دگمه ثبت در آخر کار اطلاعات و ثبت کنم همشو نو همه اطلاعات سلول هر چند ردیف باشه مثلا 10 تا

parvizwpf
شنبه 19 مرداد 1392, 02:00 صبح
میدونم keydown بدرد اینکار نمیخوره برو سراغ اون ایونتهایی که cell دارن ببنید چیزی پیدا میکنی.
اما اون کار همونیه که گفتم مثلا برای یک فیلدت:

قبل فور
string ins="insert into table values(\n";
توی فور
ins+="'++'dataGridView1.Rows[i].Cells[i].Value\n";
بعد بیرون فور آخرش باید
ins+=")";

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

sasanrstm
شنبه 19 مرداد 1392, 02:14 صبح
ممنون دوست عزیز اما شما سوال منو با سوال جواب میدی منکه چیزی نگرفتم اگه میشه تو استور پریسچر بنویس من اینجوری عادت کردم وبجای کی دان چی رو پیشنهاد میدی ؟؟؟ تو کی دان ننویسم تو چی بنویسم؟؟

sasanrstm
شنبه 19 مرداد 1392, 21:33 عصر
سلامی دوباره کسی نبود یه جواب درست به من بده از دوستای برنامه نویس

sasanrstm
جمعه 25 مرداد 1392, 22:15 عصر
سلام به همه دوستان من فقط یه سوال دارم اگه جواب اینو بدین فکر کنم مشگلم حل بشه من کد نوشتم که دوتا سلول رو ضرب کنه ودر سلول سومی نشون بده این کد کار میکنه تا ردیف سوم از ردیف 4 به بعد دیگه عمل نمیکنه یعنی حالضرب دوتا سلول انجام نمیشه لطفا راهنمائی کنید کجای کد اشتباه است البته با استفاده از کلید تب

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
//int iColumn = dataGridView1.CurrentCell.ColumnIndex;
//string name = dgc.Columns[iColumn].Name;
long sum = 0;
long su = 0;
try
{
if (e.KeyCode == Keys.tab)
{

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells[i].Value != null)
{
dataGridView1.Rows[i].Cells[3].Value = long.Parse(dataGridView1.Rows[i].Cells[1].Value.ToString()) * (long.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()));

}

}

amir200h
جمعه 25 مرداد 1392, 22:50 عصر
این کد تمام ستون های اول دیتاگرید رو میریزه تو بانک. واسه ستون های دیگه تو کوئری اضافه کنین
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SqlConnection con = new SqlConnection("server=(local);database=test;trusted_connection=ye s");
SqlCommand comupdate =
new SqlCommand(
"insert into home fild1=" + dataGridView1.Rows[i].Cells[0].Value"con);
conupdate.Open();
comupdate.ExecuteNonQuery();
conupdate.Close();
}

sasanrstm
شنبه 26 مرداد 1392, 00:08 صبح
این کد تمام ستون های اول دیتاگرید رو میریزه تو بانک. واسه ستون های دیگه تو کوئری اضافه کنین
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SqlConnection con = new SqlConnection("server=(local);database=test;trusted_connection=ye s");
SqlCommand comupdate =
new SqlCommand(
"insert into home fild1=" + dataGridView1.Rows[i].Cells[0].Value"con);
conupdate.Open();
comupdate.ExecuteNonQuery();
conupdate.Close();
}
ممنون دوست عزیز مشگل من اصلا ذخیره اطلاعات نبود حل شد دست شما درد نکنه مشگل یه چیز دیگه بود که حلش کردم ممنون از زحمتی که کشیدی متن کاملشو میزارم اینجا تا بقیه هم استفاده کنن

aliramazani
دوشنبه 13 اردیبهشت 1395, 04:17 صبح
یه سوال
من چطوری میتونم یه کمبو باکس توی گرید را به یه فیلد از جدول دیتابیس متصل کنم؟
مثلا لیست محصولاتو بیاره
سوال دوم اینکه چطور میتونم یه فیلد تکست باکس توی گرید هم داشته باشم مثلا کد محصول اگه اگه کد را زدم کمبو کالای مورد نظر را بیاره یا اگه کالا را از کمبو انتخاب کردم کد را خودکار بیاره.
با linq