PDA

View Full Version : درج شماره ردیف خودکار datagridview



momimomi
یک شنبه 29 اردیبهشت 1392, 20:38 عصر
با سلام
چطور میتونم زمان لود دیتاگرید (از سمت راست اولین ستون) یک ستون به نام ردیف داشته باشم که از شماره 1 شروع بشه و تمام سطرهای دیتاگرید رو بطور خودکار شماره گذاری کنه و با حذف یک ردیف از دیتاگرید ترتیب شماره ها به هم نخوره و سرعت برنامه هم کم نشه؟

Tiam121
یک شنبه 29 اردیبهشت 1392, 20:46 عصر
اول یه ستون جدید رو دستی به گرید اضافه کن

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
}

momimomi
یک شنبه 29 اردیبهشت 1392, 21:45 عصر
اول یه ستون جدید رو دستی به گرید اضافه کن

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
}
سلام دوست عزیز
با این کار برنامه قفل میکنه تا 2 دقیقه صبر کردم هیچ اتفاقی نیفتاد
برنامه بنده حین لود شدن فرم اصلی, دیتاگرید رو با یک جدول از دیتا ست پر میکنه
اضافه کردن ستون به صورت دستی هم با عث حذف یک ستون از دیتاگرید لود شده میشود.

ashkan1234
یک شنبه 29 اردیبهشت 1392, 22:50 عصر
با اجازه اساتید:
dataGridView1.Rows[e.RowIndex].Cells[0].Value = (e.RowIndex + 1).ToString();
اینجوری قشنگ جواب میده!

momimomi
یک شنبه 29 اردیبهشت 1392, 23:05 عصر
با اجازه اساتید:
dataGridView1.Rows[e.RowIndex].Cells[0].Value = (e.RowIndex + 1).ToString();
اینجوری قشنگ جواب میده!

دیتاگرید برنامه من 950 ردیف دارد, با اضافه کردن این کد زمان لود برنامه از 4 ثانیه به 3 دقیقه افزایش یافت!!

ashkan1234
یک شنبه 29 اردیبهشت 1392, 23:19 عصر
دیتاگرید برنامه من 950 ردیف دارد, با اضافه کردن این کد زمان لود برنامه از 4 ثانیه به 3 دقیقه افزایش یافت!!

خوب اینجوری که شما میخوایید این مشکلات رو به همراه داره!
اگه سرعت براتون مهمه،حتما و حتما ردیف را در دیتا بیس ایجاد نمایید!
البته بنده تا این حد اطلاعات دارم!
شاید اساتید راه بهتری هم داشته باشند...
موفق باشید!

aliasghar2
یک شنبه 29 اردیبهشت 1392, 23:32 عصر
اگه سرعت براتون مهمه،حتما و حتما ردیف را در دیتا بیس ایجاد نمایید!
خب اینم یه راهه که میشه با تابع rownumber توی سلکتت شماره ردیف رو بیاری اما یه نقص دار0 اونم اینه که اگه گردیت رو سورت کنی ترتیب ردیف بهم می خوره

روش قبلی که دوستمون گفت هم خوبه اما مشکل سرعت داره و با هر رفرش گرید باید این مدت زمان رو هم تحمل کنی

در حال حاضر کامپوننت هایی وجود دارن که این کارو به صورت بهینه انجام دادن و بد نیست از اونها استفاده کنی

hamid_hr
دوشنبه 30 اردیبهشت 1392, 10:24 صبح
http://msdn.microsoft.com/en-us/library/15a31akc.aspx
ببینین این virtual mod برا چی هست
یع ربطی به سرعت داره

Mahmoud.Afrad
دوشنبه 30 اردیبهشت 1392, 11:02 صبح
همین کدو در رویداد مناسب بنویسید تا بهینه تر عمل کنه.tostring هم نیازی نیست.

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
}

modern_amin
دوشنبه 30 اردیبهشت 1392, 11:38 صبح
ببین بهترین روش اینه تو خود سلکت از دیتابیس ردیف رو بندازی

hamid_hr
دوشنبه 30 اردیبهشت 1392, 12:03 عصر
من برا گزاشتن ردیف این کارو میکنم
اول با تابع Row_Number شماره ردیفو با همون دستور از sql میگیرم و داخل دیتاتیبل میریزم و برابر با datasource دیتاگرید ویو میکنم

برا اینکه وقع sort مشکلی پیش نیاد هم تو رویداد dgv_sorted اینو میزارم

for(i=0;i<((datagridview)sender).Rows.Count;i++)
((datagridview)sender)[0,i].value = i + 1;


اطلاعات من تقریبا 4000 رکورد میشه
سرعتشم خوبه به 2 ثانیه نمیرسه

tooraj_azizi_1035
دوشنبه 30 اردیبهشت 1392, 12:52 عصر
به Select تون رو RowNumber() ر اضافه کنید. موقع درج و حذف خودتون باید مدیریت کنید. یعنی با حذف Renumber و با درج خودتون شماره جدید رو بدید و باید ReadOnly باشه.

SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3 FROM User

HAMRAHSOFT.IR
جمعه 28 تیر 1392, 18:51 عصر
سلام ببخسید برای گرید شرکت telerik مثل عکس زیر که مال گرید جانوس هست ردیف ایجاد کرد

107536

HAMRAHSOFT.IR
یک شنبه 30 تیر 1392, 04:16 صبح
سلام ببخسید برای گرید شرکت telerik مثل عکس زیر که مال گرید جانوس هست ردیف ایجاد کرد

107536

دوستان کسی با تلریک کار نکرده

shadi khanum
یک شنبه 30 تیر 1392, 08:28 صبح
تو فروم خودشون سوالتو بپرس حتما جواب میدن

Eqbali
پنج شنبه 10 تیر 1395, 22:51 عصر
سلام اعضای گروه
ببخشید من یک DataGridView دارم که اطلاعات دو جدول را با استفاده از دستور UNION ALL توی آن نمایش می دهم ولی می خواهم یک ستون برای شماره ردیف در آن ایجاد کنم که به ترتیب از عدد 1 شروع بشه تا آخر.
اگر راهنمای کنید که چطور این کار را انجام دهم ممنوم میشم!

Eqbali
پنج شنبه 10 تیر 1395, 22:55 عصر
دوست عزیز
می شود تابع ROW_NUMBER() را همراه با دستور UNION ALL برای استخراج اطلاعات دو جدول استفاده کرد؟
اگر امکان دارد دستورش را بنویسید. دستوری که بند استفاده می کنم به این صورت است:

SELECT HelperName, Mablagh, Arz, DateHelp FROM TBLHelps
UNION ALL
SELECT OzvName, Mablagh, Arz, DatePardakht FROM TBLHaqOzviat WHERE Pardakht=true

momimomi
پنج شنبه 10 تیر 1395, 22:58 عصر
کد زیر رو توی رویداد لود فرم بنویس:

int rownumber = 1;
foreach (DataGridViewRow row in dgv.Rows)
{
if (row.IsNewRow) continue;
row.HeaderCell.Value = rownumber.ToString();
rownumber = rownumber + 1;
}


dgv= نام دیتاگرید شماست

kamiloted
پنج شنبه 10 تیر 1395, 23:45 عصر
با سلام
چطور میتونم زمان لود دیتاگرید (از سمت راست اولین ستون) یک ستون به نام ردیف داشته باشم که از شماره 1 شروع بشه و تمام سطرهای دیتاگرید رو بطور خودکار شماره گذاری کنه و با حذف یک ردیف از دیتاگرید ترتیب شماره ها به هم نخوره و سرعت برنامه هم کم نشه؟


private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
foreach (DataGridViewRow r in dataGridView1.Rows)
{
dataGridView1.Rows[r.Index].Cells[0].Value = String.Format("{0}", r.Index + 1);
}
}


روی دیتا گرید کلیک کنید و یه ستون به اسم ردیف درست کنید. درضمن باید حتما هدر نیم هم بهش بدی

sh
یک شنبه 10 مرداد 1395, 13:16 عصر
row.HeaderCell.Value = String.Format("{0}", row.Index + 1);

برای تغییر فونت هم :


rowFont = grid.RowHeadersDefaultCellStyle.Font

jebco2000
چهارشنبه 13 اردیبهشت 1402, 16:35 عصر
کاش بیشتر راهنمایی میکردید. مثلا کل کد رو اینجا قرار میدادید.

پرستو پارسایی
چهارشنبه 13 اردیبهشت 1402, 18:39 عصر
شاید این کد به شما کمک کنه

private void myDataGridView_Load(object sender, EventArgs e)
{
// اضافه کردن ستون جدید به دیتاگرید
DataGridViewColumn column = new DataGridViewTextBoxColumn();
column.Name = "ردیف";
column.HeaderText = "ردیف";
column.Width = 50;
myDataGridView.Columns.Insert(0, column);


// شماره گذاری خودکار سطرها
for (int i = 0; i < myDataGridView.Rows.Count; i++)
{
myDataGridView.Rows[i].Cells[0].Value = (i + 1).ToString();
}
}


private void myDataGridView_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
// بررسی می کنیم که آیا سطر دیتاگرید حذف شده است یا خیر
if (e.RowIndex >= 0)
{
// به روز رسانی شماره گذاری سطرها بعد از حذف یک سطر
for (int i = e.RowIndex; i < myDataGridView.Rows.Count; i++)
{
myDataGridView.Rows[i].Cells[0].Value = (i + 1).ToString();
}
}
}

برای کاهش زمان لود، می توانید از رویه هایی مانند لود کردن داده ها به صورت تکه تکه و به صورت ناهمزمان استفاده کنید. به عنوان مثال، می توانید داده های دیتاگرید را به صورت ناهمزمان در حین بارگذاری فرم با استفاده از یک نخ جداگانه بارگیری کنید، به جای بارگذاری همه داده ها به صورت همزمان. همچنین، می توانید تعداد ستون‌های دیتاگرید را کاهش دهید و فقط ستون‌هایی را که برای کاربر لازم است نمایش دهید.

پرستو پارسایی
چهارشنبه 13 اردیبهشت 1402, 18:57 عصر
سلام اعضای گروه
ببخشید من یک DataGridView دارم که اطلاعات دو جدول را با استفاده از دستور UNION ALL توی آن نمایش می دهم ولی می خواهم یک ستون برای شماره ردیف در آن ایجاد کنم که به ترتیب از عدد 1 شروع بشه تا آخر.
اگر راهنمای کنید که چطور این کار را انجام دهم ممنوم میشم!



private void Form1_Load(object sender, EventArgs e){
// ایجاد دیتاست و اضافه کردن جدول ها به آن
DataSet dataSet = new DataSet();
DataTable dataTable1 = new DataTable("Table1");
DataTable dataTable2 = new DataTable("Table2");


// افزودن ستون ها به جدول ها
dataTable1.Columns.Add("ID");
dataTable1.Columns.Add("Name");
dataTable2.Columns.Add("ID");
dataTable2.Columns.Add("Name");


// افزودن داده ها به جدول ها
dataTable1.Rows.Add(1, "John");
dataTable1.Rows.Add(2, "Alice");
dataTable2.Rows.Add(3, "Bob");
dataTable2.Rows.Add(4, "Emily");


// اضافه کردن جدول ها به دیتاست
dataSet.Tables.Add(dataTable1);
dataSet.Tables.Add(dataTable2);


// ایجاد دستور SQL برای ادغام دو جدول با استفاده از UNION ALL
string sql = "SELECT *, ROW_NUMBER() OVER(ORDER BY ID) AS RowNumber FROM (SELECT ID, Name FROM Table1 UNION ALL SELECT ID, Name FROM Table2) AS UnionTable";


// ایجاد یک adapter برای اجرای دستور SQL و پر کردن داده ها در دیتاگرید
SqlDataAdapter adapter = new SqlDataAdapter(sql, "connectionString");
DataTable resultTable = new DataTable();
adapter.Fill(resultTable);


// ایجاد ستون جدید برای شماره ردیف
DataGridViewColumn column = new DataGridViewTextBoxColumn();
column.HeaderText = "شماره ردیف";
column.Width = 100;
dataGridView1.Columns.Insert(0, column);


// نمایش داده ها در دیتاگرید و تنظیم شماره ردیف
dataGridView1.DataSource = resultTable;
}


private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
// نمایش شماره ردیف در ستون جدید
dataGridView1.Rows[e.RowIndex].Cells[0].Value = (e.RowIndex + 1).ToString();
}