PDA

View Full Version : سوال: پرکردن ستون خاص و از پیش تعریف شده datagridview از datatable توسط حلقه



aria2006
پنج شنبه 12 آذر 1394, 11:38 صبح
سلام . من تقریبا همیشه دیتاگرید ویو هامو با دستور زیر از دیتابیس پر میکنم . ولی یه مشکلی هست همیشه میاد از ستون اول پر میکنه. حالا من یه کوئری دارم که میخوام نتیجه اش دقیقا بشینه تو ستون دوم دیتاگرید ویو.... میشه راهنمایی بفرمایید چطوری؟؟

DataTable dt = new DataTable();
SqlCommand cmd2 = new SqlCommand("select A_access.flagaccess from A_access,A_user where A_access.users_id = A_user.user_no and
A_access.users_id=@codekar2", myconstr.con);
cmd2.Parameters.AddWithValue("@codekar2", codkar.Text);
SqlDataAdapter da = new SqlDataAdapter(cmd2);
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
dataGridView1.Rows.Add(dt.Rows[i].ItemArray);
}
myconstr.con.Open();
cmd.ExecuteNonQuery();
myconstr.con.Close();

hadi vafaii
پنج شنبه 12 آذر 1394, 12:15 عصر
سلام من از این روش استفاده کردم هر ستونی رو که میخوام با فیلد مورد نظر پر میکنه

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection con = DB.connection();
string comandtext = "select * from tbl1 where ID like '" + lblparvande.Text + "%'";
OleDbCommand comand = new OleDbCommand(comandtext, con);
con.Open(); OleDbDataReader red = comand.ExecuteReader();

if (red.Read())
{
dataGridView1.CurrentRow.Cells[2].Value += red["name"].ToString();

}
else
{

MessageBox.Show("شماره پرونده درج شده وجود ندارد");
}
con.Close();
}

ژیار رحیمی
پنج شنبه 12 آذر 1394, 12:17 عصر
سلام راه ساده ش اینه که یه ستون خودت به گرید اضافه کنی قبل از bind کردن راه دومش اینه که یه ستون به DataTable قبل از حلقه for اضافه کنی
dt.Columns.Add("NewColumn", typeof(Int32));داخل حلقه هم قبل از ریختن سطر جاری DataTable اون ستون اضافه شده رو هم مقدار دهی کنی

dt.Columns.Add("NewColumn", typeof(Int32));
foreach (DataRow dr in dt.Rows)
{
dr["NewColumn"] = 0;
dataGridView1.Rows.Add(dr);
}

aria2006
پنج شنبه 12 آذر 1394, 13:05 عصر
سلام من از این روش استفاده کردم هر ستونی رو که میخوام با فیلد مورد نظر پر میکنه

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection con = DB.connection();
string comandtext = "select * from tbl1 where ID like '" + lblparvande.Text + "%'";
OleDbCommand comand = new OleDbCommand(comandtext, con);
con.Open(); OleDbDataReader red = comand.ExecuteReader();

if (red.Read())
{
dataGridView1.CurrentRow.Cells[2].Value += red["name"].ToString();

}
else
{

MessageBox.Show("شماره پرونده درج شده وجود ندارد");
}
con.Close();
}

من با کد زیر ستون مورد نظر رو در دیتاگرید پیدا کردم ولی با دیتای مورد نظر پر نمیشه و تو تمام سلولهای اون سطر میزنه System.Object[]


dataGridView1.Rows[i].Cells[4].Value = (dt.Rows[i].ItemArray);

hadi vafaii
جمعه 13 آذر 1394, 16:56 عصر
سلام من از کد بالا که قرار داده بودم تو یه پروژه برای پر کردن تکست باکسم استفاده کردم حالا شما به جای if از while استفاده کن شاید درست شد

به این صورت
OleDbConnection con = DB.connection();
string comandtext = "select * from tbl1 where ID = '" + lblparvande.Text + "'";
OleDbCommand comand = new OleDbCommand(comandtext, con);
con.Open();
OleDbDataReader red = comand.ExecuteReader();
while (red.Read())
{
lblname.Text += red["name"].ToString();
lblpedar.Text += red["pedar"].ToString();
lblfamil.Text += red["famil"].ToString();
lblmeli.Text += red["codemeli"].ToString();
}

con.Close();

و به جای اون lbl.tex هم اینو قرار بدین
dataGridView1.CurrentRow.Cells[2].Value +
البته شما خودتون استادی لازم نیست یه مبتدی چیزی بهتون بگه

aria2006
شنبه 14 آذر 1394, 09:11 صبح
[/CSHARP]
و به جای اون lbl.tex هم اینو قرار بدین
dataGridView1.CurrentRow.Cells[2].Value +
البته شما خودتون استادی لازم نیست یه مبتدی چیزی بهتون بگه

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

currentrow فقط اشاره به سطر جاری از دیتاگرید میکنه.اما در حالی که اطلاعات من شامل یه جدوله (دیتاتیبل) که باید هر بار اندیس سطر دیتاگریدویو هم بروز بشه تا اطلاعات در سطرها از بالا تا پایین درج شوند. مشکل بعدی در نحوه استخراج از دیتاتیبل هست که بفهمه هر سطر i ام از دیتاتیبل رو معادل سطر i ام دیتاگرید قرار بده. بعد OleDbDataReader اگه اشتباه نکنم فقط یک سطرو از دیتابیس برمیگردونه...

aria2006
شنبه 14 آذر 1394, 09:36 صبح
سلام راه ساده ش اینه که یه ستون خودت به گرید اضافه کنی قبل از bind کردن راه دومش اینه که یه ستون به DataTable قبل از حلقه for اضافه کنی
dt.Columns.Add("NewColumn", typeof(Int32));داخل حلقه هم قبل از ریختن سطر جاری DataTable اون ستون اضافه شده رو هم مقدار دهی کنی

dt.Columns.Add("NewColumn", typeof(Int32));
foreach (DataRow dr in dt.Rows)
{
dr["NewColumn"] = 0;
dataGridView1.Rows.Add(dr);
}


سلام. مشکل من اینه که سطر جاری دیتاتیبل رو نمیدونم چجوری بایند کنم با ستون i ام از دیتاگرید... من یه دیتاگرید دارم که سه ستونش با یه کوئری پر شده ... تا اینجا مشکلی نیست. حالا من یه ستون چهارمی در این دیتاگرید تعریف کردم(از طریق پروپرتی) که قراره کاربر بعد از زدن یه باتن یه کوئری جدیدی انجام بشه و ستون چهارم این جدول رو پر کنه. الان دقیقا مشکل من اینه که این ستون چهارمی رو چطور از دیتاتیبل پر کنم؟؟

aria2006
یک شنبه 15 آذر 1394, 08:02 صبح
سلام - من برنامه ام فقط لنگ همین یه خط کده....اینکه چجوری نتیجه یه کوئری رو بریزم تو ستون دلخواه از دیتاگریدم... یعنی کسی تابحال با همچین موردی برخورد نداشته ؟!!!:اشتباه::ناراحت:

Mahmoud.Afrad
دوشنبه 16 آذر 1394, 03:26 صبح
شما آرایه ItemArray رو داری میریزی توی سلول در صورتی که یک سلول از سطر دیتاتیبل رو باید بخونی
dataGridView1.Rows[i].Cells[4].Value = dt.Rows[i][0];

aria2006
دوشنبه 16 آذر 1394, 07:19 صبح
شما آرایه ItemArray رو داری میریزی توی سلول در صورتی که یک سلول از سطر دیتاتیبل رو باید بخونی
dataGridView1.Rows[i].Cells[4].Value = dt.Rows[i][0];

سلام استاد عزیز Mahmoud.Afrad
بی نهایت سپاسگزارم.دو سه روزی معطل همین یه نکته بودم. درست شد.:تشویق::تشویق::تشویق: