PDA

View Full Version : اضافه کردن یک ستون به datagridview بایند شده



abcd_a
دوشنبه 01 آبان 1391, 20:27 عصر
سلام
چطوری میشه یک ستون به عنوان شماره به دیتاگرید ویوی که بایند شده به دیتابیس عنوان شماره سطرها اضافه کرد؟
لازم به ذکر کلید اصلی تو جدول به صورت identity incremetn تعریف شده که به علت حذف ترتیب شماره ها به هم می خوره و نمیشه به عنوان شماره سطر ازش استفاده کرد
با تشکر

turbo_boy2006
دوشنبه 01 آبان 1391, 21:02 عصر
سلام

من واسه نمایش قلم های یک فاکتور همین مشکل رو داشتم ، سورس این بخش رو کپی میکنم ، سادس:


if


(datagridfact != null)

{

if


(datagridfact.Columns[2].HeaderText == "SNO")

{

datagridfact.Columns.Remove(

"SNO");

}

DataGridViewTextBoxCell


newCell = new DataGridViewTextBoxCell();

DataGridViewColumn


SNOCol = new DataGridViewColumn(newCell);

SNOCol.DisplayIndex = 0;

SNOCol.HeaderText =

"SNO";

SNOCol.Name =

"SNO";

datagridfact.Columns.Add(SNOCol);

int


count;

int


n=0;

for


( count = 0; count < datagridfact.RowCount; count++)

{

datagridfact.Rows[n].Cells[

"SNO"].Value = count;

n++;

}

}

morteza271
دوشنبه 01 آبان 1391, 21:41 عصر
سلام

من واسه نمایش قلم های یک فاکتور همین مشکل رو داشتم ، سورس این بخش رو کپی میکنم ، سادس:


if


(datagridfact != null)

{

if


(datagridfact.Columns[2].HeaderText == "SNO")

{

datagridfact.Columns.Remove(

"SNO");

}

DataGridViewTextBoxCell


newCell = new DataGridViewTextBoxCell();

DataGridViewColumn


SNOCol = new DataGridViewColumn(newCell);

SNOCol.DisplayIndex = 0;

SNOCol.HeaderText =

"SNO";

SNOCol.Name =

"SNO";

datagridfact.Columns.Add(SNOCol);

int


count;

int


n=0;

for


( count = 0; count < datagridfact.RowCount; count++)

{

datagridfact.Rows[n].Cells[

"SNO"].Value = count;

n++;

}

}


دوست عزیز این چه روشیه!
اگه قرار به کد نویسی هست این کار رو بکنید :
1- ستون اول گریدتون رو بذارید برای ردیف مثلا با نام RowNum
2- کوئری خود رو به صورت زیر بنویسید :
Select '' as RowNum, name, ...
اون ستونی که با نام RowNum هستش برای ردیفه و در ستون اولی که در گریدتون گذاشتین خاصیت DataPropertyName رو برابر RowNum قرار بدین.

3- بعد از اینکه گریدتون رو پر می کنید کد زیر رو بنویسید :
for (int i = 0; i < dataGridView1.RowCount; i++)
dataGridView1.Rows[i].Cells["RowNum"].Value = (i + 1).ToString();

می بینید که نیازی به حذف ستون و ایجاد دوباره آن نیست.

به این خاطر گفتم این روش خوب نیست چون میدونم با خود کوئری هم میشه این کار رو کرد ولی راستش من تا الان این کار رو نکردم نمیتونم نظری بدم.
شاید بقیه دوستان بتونن کمکتون کنن...
موفق باشید

Mahmoud.Afrad
پنج شنبه 04 آبان 1391, 02:09 صبح
بعد از اینکه گریدتون رو پر می کنید کد زیر رو بنویسید :
for (int i = 0; i < dataGridView1.RowCount; i++)
dataGridView1.Rows[i].Cells["RowNum"].Value = (i + 1).ToString();


این روش هونطور که خودتون گفتید اصلا خوب نیست چون باید این کد رو به صورت یک متد بعد از اضافه و کم کردن سطر فراخوانی کنند تا شماره ها به ترتیب بشن.


اگر گریدویو فقط برای نمایش اطلاعات هست و سطری بهش اضافه و کم نمیشه در خود کوئری میتونید شماره سطر رو هم سلکت کنید:
select ROW_NUMBER() OVER(ORDER BY tbl.id asc)as Radif, *
from tbl

اگر به گرید سطر اضافه یا کم میشه میتونید یک ستون به خود گرید(نه به دیتاسورس و نه به کوئری) اضافه کنید مثلا ستونی به نام Radif و از رویداد CellFormatting استفاده کنید تا شماره ردیف خود به خود تخصیص پیدا کنه:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex == dataGridView1.Columns["Radif"].Index)
{
dataGridView1.Rows[e.RowIndex].Cells["Radif"].Value = e.RowIndex + 1;
}
}