PDA

View Full Version : پر رنگ کردن ستون datagridview



eletcomp
دوشنبه 10 آذر 1393, 11:05 صبح
با سلام بر اساتید
توی این فرم :من جستجو تعبیه کردم میخوام زمانیکه نتیجه جستجو به دست امد: ان ستون مورد نظر به رنگ طلایی یا نمیدانم نارنجی!! طبق عکس که با فلش سبز مشخص کردم در بیاد!!!
مثلا ستون عنوان کتاب: که جستجو برا اساس اش انجام شده به رنگ ستون isbn در بیاد!! که ادم بفهمه که توی کدام ستون جستجو انجام شده!!!

http://www.uplooder.net/img/image/53/383529c18378921382fa013869b3a7d3/1.JPG

کد جستجو:





void search()
{


string query = null;
try
{
switch (CmbSearch.Text)
{
case "شابک":
{
Label2.Text = " جستجو بر اساس شابک";


query = "select * from Tbl_book where b_isbn LIKE'" + txtsearch.Text + "%'"; break;


}
case "عنوان کتاب":
{
Label2.Text = "جستجو بر اساس عنوان کتاب";


query = "select * from Tbl_book where b_title LIKE '" + txtsearch.Text + "%'"; break;


}


case "نام مولف":
{
Label2.Text = "جستجو بر اساس نام مولف";
query = "select * from Tbl_book where b_moalef LIKE '" + txtsearch.Text + "%'"; break;
}








default: { break; }
}




con.Open();
SqlCommand command = new SqlCommand();
command.CommandText = query;
command.Connection = con;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();
dataGridView.DataSource = objDataTable;
}
catch { }


}





سپاس

hamid_hr
دوشنبه 10 آذر 1393, 11:11 صبح
dgv.Columns[0].DefaultCellStyle.BackColor = Color.Red;

فقط شماره ستونو خودتون مشخص کنید

eletcomp
دوشنبه 10 آذر 1393, 12:04 عصر
ممنون دوست عزیز: ولی من میخوام همزمان با اجرای هر کوئری: ان ستون مربوطه رنگ اش تغییر کند!!! مثلا زمانیکه در کمبوباکس جستجو برا اساس شابک را انتخاب کردم: پس از به دست امدن نتیجه :همزمان با ان: رنگ ان ستون تغییر کند!!!
کد شما باید کجا وارد کنم!!! بعد از هر کوئری!!؟؟

http://www.uplooder.net/img/image/46/6ebe16f12e35d7b22939e7e37079e8ac/query.JPG


سپاس

vb341
دوشنبه 10 آذر 1393, 12:09 عصر
فکر کنم باید در خارج از switch قراز بدی

hamid_hr
دوشنبه 10 آذر 1393, 12:12 عصر
کد شما باید کجا وارد کنم!!!
بعد از هر جستجو باید بنویسی

eletcomp
دوشنبه 10 آذر 1393, 13:20 عصر
بعد از هر جستجو باید بنویسی
یعنی چی!! بعد از هر جستجو باید بنویسم!!؟؟؟
لطفا نمونه کد بدید یا بنویسید! البته کد جستجو را قرار دادم!
سپاس

eletcomp
دوشنبه 10 آذر 1393, 16:54 عصر
مشکل را تا حدودی حل شد!!
الان یک سئوال»
ان رنگ طلایی که به صورت پیشرض توی دیتاگریدویو ظاهر میشه! اسم اش چی هست!! توی پست اول با فلش سبز مشخص کردم!!

mojtabamalaekeh
دوشنبه 10 آذر 1393, 18:14 عصر
مقدار CurrentCell رو تغییر بدید و Selected رو True کنید:

dataGridView2.CurrentCell = dataGridView2["fName", 1];
dataGridView2.CurrentCell.Selected = true;
ستون رو دادم fName که میدونی معنیش چیه و سطر رو هم دادم 1 که میشه ردیف دوم.
حاصل دو خط کد بالا مثل این می مونه که کاربر با ماوس روی اون خونه کلیک کرده باشه.

eletcomp
دوشنبه 10 آذر 1393, 18:30 عصر
ممنون دوست عزیز: این کد را کجا بنویسم!!! لطفا بیشتر توضیح بدهید!!


ستون رو دادم fName که میدونی معنیش چیه و سطر رو هم دادم 1 که میشه ردیف دوم.
حاصل دو خط کد بالا مثل این می مونه که کاربر با ماوس روی اون خونه کلیک کرده باشه.
fname یعین چی!!؟؟:خجالت: نمیدانم!!!:متفکر:

سپاس

mojtabamalaekeh
دوشنبه 10 آذر 1393, 18:48 عصر
fName یعنی اسم ستونی که میخوای رنگی بشه.
بعد از مقداردهی به خاصیت DataSource گریدویو که ردیف ها بازسازی شدن، کد رنگی کردن اون ستون رو بنویس.
شماره ستون همون ColumnName ستونیه که براش عنوان فارسی نوشتی. این که شماره چاپ اسم ستونش چیه رو خودت میدونی که گرید رو طراحی کردی.
ردیف هم بهتره بدی صفر که همون سطر اول انتخاب بشه. گرید هم که همیشه یه سطر آخرش هست! پس اگه کوئری هیچ خروجی نداشته باشه باز هم انتخاب ردیف صفر خطا نمیده.

eletcomp
سه شنبه 11 آذر 1393, 13:08 عصر
دوست عزیز: این کد ها را دقیقا کجای برنامه باید وارد کنم!! توی قسمت جستجو!!؟؟ توی این قسمت وارد کردم ولی جواب نداد!!!


بعد از مقداردهی به خاصیت DataSource گریدویو که ردیف ها بازسازی شدن، کد رنگی کردن اون ستون رو بنویس.
در ضمن من از روش ویزاردی برای اتصال به دیتابیس استفاده نمی کنم!! و از sql command ado.net استفاده می کنم!!!
منظورتان از مقدار دهی به datasource چی هست؟؟
سپاس

mojtabamalaekeh
سه شنبه 11 آذر 1393, 16:26 عصر
یعنی بعد از این خط:

dataGridView.DataSource = objDataTable;

eletcomp
سه شنبه 11 آذر 1393, 22:54 عصر
ممنون دوست عزیز: ولی زمانیکه این کد قرار می دهم فقط یک حالت وجود داره!!!
من میخوام زمانیکه از کمبوباکس جستجو برا اساس عنوان کتاب را انتخاب کردم!!! ان ستون علامت دار بشه!!! کلا چند حالات داریم!!
و...
سپاس

mojtabamalaekeh
چهارشنبه 12 آذر 1393, 07:06 صبح
بله، اگه اسم ستون (همونجا که من نوشتم "fName") ثابت باشه همیشه فقط یه ستون ثابت انتخاب میشه.
اسم ستون رو توی بلوک switch مقداردهی کنید: با یک متغیر رشته ای که قبل از سوئیچ تعریف خواهید کرد.

اگه حرفام مبهمه، همون کدی که ازش عکس گرفتید و الان آخرین تغییرات رو توش دادین بذارید اینجا.

eletcomp
چهارشنبه 12 آذر 1393, 10:22 صبح
ممنون دوست عزیز: این روشی که گفتید را انجام دادم ولی باز جواب نداد!!!
کد ها براتون میزارم!






void search()
{


string query = null;
try
{
switch (CmbSearch.Text)
{
case "شابک":
{
Label2.Text = " جستجو بر اساس شابک";
//dataGridView.Columns[0].DefaultCellStyle.BackColor = Color.Gold;
//dataGridView.Columns[1].DefaultCellStyle.BackColor = Color.White;
//dataGridView.Columns[4].DefaultCellStyle.BackColor = Color.White;

query = "select * from Tbl_book where b_isbn LIKE'" + txtsearch.Text + "%'"; break;



}
case "عنوان کتاب":
{
Label2.Text = "جستجو بر اساس عنوان کتاب";
//dataGridView.Columns[1].DefaultCellStyle.BackColor = Color.Gold;
//dataGridView.Columns[0].DefaultCellStyle.BackColor = Color.White;
//dataGridView.Columns[4].DefaultCellStyle.BackColor = Color.White;
dataGridView.CurrentCell = dataGridView["b_title", 0];
//dataGridView.CurrentCell.Selected = true;
query = "select * from Tbl_book where b_title LIKE '" + txtsearch.Text + "%'"; break;


}


case "نام مولف":
{
Label2.Text = "جستجو بر اساس نام مولف";
//dataGridView.Columns[4].DefaultCellStyle.BackColor = Color.Gold;
//dataGridView.Columns[0].DefaultCellStyle.BackColor = Color.White;
//dataGridView.Columns[1].DefaultCellStyle.BackColor = Color.White;
query = "select * from Tbl_book where b_moalef LIKE '" + txtsearch.Text + "%'"; break;

}



default: { break; }


}


con.Open();
SqlCommand command = new SqlCommand();
command.CommandText = query;
command.Connection = con;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();
dataGridView.DataSource = objDataTable;
//dataGridView.CurrentCell = dataGridView["b_title", 0];
dataGridView.CurrentCell.Selected = true;


}
catch { }




سپاس

hamid_hr
چهارشنبه 12 آذر 1393, 12:06 عصر
شما باید بعد از اینکه به datasource مقدار دهی کردین استایل ستون رو ست کنین

eletcomp
چهارشنبه 12 آذر 1393, 14:36 عصر
شما باید بعد از اینکه به datasource مقدار دهی کردین استایل ستون رو ست کنین
چطوری!! لطفا بیشتر توضیح بدهید!

salibsatan
چهارشنبه 12 آذر 1393, 16:10 عصر
فکر کنم باید دیتا گرید رفرش بشه.یه متغیر سراسری بساز، اسم ستون رو بهش بده، بعد هربار کلیک دکمه دیتاگرید رو رفرش کن و اسم ستون مورد نظر رو از متغیر بگیر

mojtabamalaekeh
چهارشنبه 12 آذر 1393, 18:50 عصر
انگار حرفام مبهم بود :)
متغیر searchCol رو که قبل از سوئیچ تعریف شده، داخل کیس های سوئیچ مقداردهی کنید. من حدسی مقدار دادم گفتم شاید ستون های گرید همنام فیلدهای بانکتون باشن.


void search()
{
string query = null, searchCol = "";
try
{
switch (CmbSearch.Text)
{
case "شابک":
{
searchCol = "b_isbn";
Label2.Text = " جستجو بر اساس شابک";
query = "select * from Tbl_book where b_isbn LIKE'" + txtsearch.Text + "%'"; break;
}
case "عنوان کتاب":
{
searchCol = "b_title";
Label2.Text = "جستجو بر اساس عنوان کتاب";
query = "select * from Tbl_book where b_title LIKE '" + txtsearch.Text + "%'"; break;
}
case "نام مولف":
{
searchCol = "b_moalef";
Label2.Text = "جستجو بر اساس نام مولف";
query = "select * from Tbl_book where b_moalef LIKE '" + txtsearch.Text + "%'"; break;
}
default: { break; }
}
SqlConnection con = new SqlConnection("");
con.Open();
SqlCommand command = new SqlCommand();
command.CommandText = query;
command.Connection = con;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();
dataGridView.DataSource = objDataTable;
dataGridView.CurrentCell = dataGridView[searchCol, 0];
dataGridView.CurrentCell.Selected = true;
}
catch { }
}


اگر هم خواستی کل ستون رنگی بشه:
بجای این

dataGridView.CurrentCell.Selected = true;

بنویس

foreach (DataGridViewRow dgvRow in dataGridView.Rows)
dgvRow.Cells[searchCol].Selected = true;