PDA

View Full Version : سوال: قرار دادن ستون ردیف در DataGridView



zahra111
یک شنبه 27 اردیبهشت 1388, 13:27 عصر
با سلام به همه دوستان. چطور میشه یک ستون با عنوان ردیف برای شماره گذاری رکوردهای DataGridView اضافه کرد؟
رکوردها با استفاده از کد نویسی در DataGridView نمایش داده می شن.

adinochestva
یک شنبه 27 اردیبهشت 1388, 13:38 عصر
من از اين استفاده مي كنم :



private void dgDetail_RowsInserted(object sender, DataGridViewRowsAddedEventArgs e)
{
try
{
if (e.RowIndex == 0)
{
dgDetail.Rows[0].Cells[0].Value = 1;


}
else
{
dgDetail.Rows[e.RowIndex].Cells[0].Value = int.Parse(dgDetail.Rows[e.RowIndex - 1].Cells[0].Value.ToString()) + 1;
}
}
catch
{
}
}

zahra111
یک شنبه 27 اردیبهشت 1388, 16:18 عصر
من با VS2005 کار می کنم.

رویداد RowsInserted رو پیدا نکردم. این کد رو تو رویداد RowsAdded قرار دادم اما تو اجرا فقط رکورد اول و دوم رو شماره گذاری میکنه.
روش دیگه ای نداره؟

adinochestva
یک شنبه 27 اردیبهشت 1388, 18:10 عصر
دليلي نداره فقط اول و دوم رو ادد كنه !
try را برداريد ببينيد ارروش چيه !

esmaeily-hosein
یک شنبه 27 اردیبهشت 1388, 18:19 عصر
DataTable dtOrder = new DataTable();
DataColumn IdentityColumn = new DataColumn
{
ColumnName = "Counter",
AutoIncrement = true,
AutoIncrementSeed = 1,
AutoIncrementStep = 2,
DataType = typeof(int)
};
dtOrder.Columns.AddRange(new DataColumn[]
{
IdentityColumn,
new DataColumn("CustomerID", typeof(int))
});


DataRow row = dtOrder.NewRow();
row["CustomerID"] = 5;
dtOrder.Rows.Add(row);

hossein_moghimi
یک شنبه 27 اردیبهشت 1388, 19:50 عصر
اگه داده های گریدویو از داخل پایگاه داده پر میشه ، شاید بهتر باشه از دستورات sql در هنگام انتخاب جدول برای درج ردیف استفاده کنید.

mahdi_7610
یک شنبه 27 اردیبهشت 1388, 21:05 عصر
منظورتون Auto Number هست ؟

خب اگه پایگاه داده شما sql sarver هست از داخل خود پایگاه داده یک فیلد با این قابلیت اضافه کنید .

تا برای هر سطر شماره بندازه

موفق باشی .

zahra111
یک شنبه 27 اردیبهشت 1388, 21:24 عصر
منظورتون Auto Number هست ؟

خب اگه پایگاه داده شما sql sarver هست از داخل خود پایگاه داده یک فیلد با این قابلیت اضافه کنید .

تا برای هر سطر شماره بندازه

موفق باشی .
توی sql server وقتی رکوردی رو حذف می کنیم فیلد autonumber اتومات تنظیم نمیشه و به روند صعودی خودش ادامه می ده ، پس نمی تونم ازش استفاده کنم.

zahra111
یک شنبه 27 اردیبهشت 1388, 21:27 عصر
اگه داده های گریدویو از داخل پایگاه داده پر میشه ، شاید بهتر باشه از دستورات sql در هنگام انتخاب جدول برای درج ردیف استفاده کنید.
میشه بیشتر توضیح بدین؟ کد sql اون چه جوریه؟

zahra111
یک شنبه 27 اردیبهشت 1388, 21:29 عصر
DataTable dtOrder = new DataTable();

DataColumn IdentityColumn = new DataColumn
{
ColumnName = "Counter",
AutoIncrement = true,
AutoIncrementSeed = 1,
AutoIncrementStep = 2,
DataType = typeof(int)
};
dtOrder.Columns.AddRange(new DataColumn[]
{
IdentityColumn,
new DataColumn("CustomerID", typeof(int))
});



DataRow row = dtOrder.NewRow();
row["CustomerID"] = 5;
dtOrder.Rows.Add(row);



لطف می کنید توضیح بدین؟ این کد رو کجا باید بنویسم؟

asefy2008
یک شنبه 27 اردیبهشت 1388, 21:50 عصر
http://barnamenevis.org/forum/showthread.php?t=158397

zahra111
دوشنبه 28 اردیبهشت 1388, 00:15 صبح
راه حلش اینه:
توی رویداد CellFormatting کد زیر رو می نوسیم:
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;

asefy2008
دوشنبه 28 اردیبهشت 1388, 00:46 صبح
اون جوری که دوستمون فرمودن بله ولی من فکر کنم اگر رویدادش رو تغییر بدیم بهتره باشه چون فکر کنم تو تعداد بالا مشکل پیدا کنه.در هر صورت این کد بهترین کدی بود که برای شماره خودکار دیدم.
پیروز باشید.

zahra111
دوشنبه 28 اردیبهشت 1388, 01:09 صبح
اون جوری که دوستمون فرمودن بله ولی من فکر کنم اگر رویدادش رو تغییر بدیم بهتره باشه چون فکر کنم تو تعداد بالا مشکل پیدا کنه.در هر صورت این کد بهترین کدی بود که برای شماره خودکار دیدم.
پیروز باشید.

بهتره تو چه رویدادی بنویسیم؟ برای تعداد بالا چه مشکلی پیدا می کنه و چرا؟

Sweety
دوشنبه 28 اردیبهشت 1388, 09:34 صبح
توي SQl از اين كد استفاده كن كه YourField ميتونه هر كدوم از فيلدهاي جدولت باشه

Select Row_Number() OVER (ORDER BY YourField) AS Row, *
FROM YourTable

zahra111
دوشنبه 28 اردیبهشت 1388, 12:10 عصر
توي SQl از اين كد استفاده كن كه YourField ميتونه هر كدوم از فيلدهاي جدولت باشه

Select Row_Number() OVER (ORDER BY YourField) AS Row, *
FROM YourTable
من این کد رو تو محیط query analyzer تست کردم error می ده. شما خودتون تست کردین؟

adinochestva
دوشنبه 28 اردیبهشت 1388, 12:13 عصر
query كه ايشون دادن براي sql 2005 هست

asefy2008
دوشنبه 28 اردیبهشت 1388, 15:53 عصر
بهتره تو چه رویدادی بنویسیم؟ برای تعداد بالا چه مشکلی پیدا می کنه و چرا؟
هنوز وقت نکردم بررسی کنم چه رویدادی بهتره.اون تایپیک رو دقیق مطالعه بفرمایید تو یکی از پست هاش تصویری از مشکل به وجود اومده رو قرار دادم البته شاید اون مشکل از برنامه خودم باشه که بعید می دونم چون با حذف اون کد مشکل برنامم حل میشه.
شما یه پروژه جدید ایجاد کنید و بعد از این که به دیتابیس وصل شدید از کد بالا استفاده کنید در اون چند تا داده قرار بدید در حالت اجرا ستون اول گریدتون رو نگاه کنید مرتب در حال تغییر است این جور به نظر می رسه با داده های زیاد مشکل پیدا کنه .
البته بازهم میگم باید بررسی کنم ممکن مشکل از برنامه خودم باشه!!

elahe1364
دوشنبه 28 اردیبهشت 1388, 18:37 عصر
private void DGV_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
this.DGV[0, e.RowIndex].Value = this.DGV.Rows.Count.ToString();
}

zahra111
دوشنبه 28 اردیبهشت 1388, 19:57 عصر
private void DGV_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
this.DGV[0, e.RowIndex].Value = this.DGV.Rows.Count.ToString();
}

خودتون تست کردین؟
من تست کردم اما فقط ردیف اول و دوم رو شماره گذاری می کنه.

elahe1364
دوشنبه 28 اردیبهشت 1388, 23:55 عصر
بله برای من جواب میده
این حالت هم تست کنید


if (e.RowIndex == this.DGV.Rows.Count - 1)
this.DGV[0, e.RowIndex].Value = this.DGV.Rows.Count.ToString();

Sweety
سه شنبه 29 اردیبهشت 1388, 12:00 عصر
من این کد رو تو محیط query analyzer تست کردم error می ده. شما خودتون تست کردین؟
بله من تست كردم.البته توي SQL2005 اگه از 2005 استفاده مي كنين لطفا error رو بذارين اينجا.

zahra111
سه شنبه 29 اردیبهشت 1388, 15:14 عصر
بله من تست كردم.البته توي SQL2005 اگه از 2005 استفاده مي كنين لطفا error رو بذارين اينجا.
من از 2000 استفاده می کنم و ظاهرا این دستور تو 2005 جواب می ده.

zahra111
سه شنبه 29 اردیبهشت 1388, 15:19 عصر
بله برای من جواب میده
این حالت هم تست کنید


if (e.RowIndex == this.DGV.Rows.Count - 1)
this.DGV[0, e.RowIndex].Value = this.DGV.Rows.Count.ToString();

اینکه ستون صفر از چه نوعی باشه تاثیری رو جواب داره؟ به نظر شما چه دلیلی می تونه داشته باشه که فقط ردیف 1و2 رو شماره گذاری کنه در حالیکه شما می گین درست جواب می ده؟

elahe1364
سه شنبه 29 اردیبهشت 1388, 19:18 عصر
من این کد رو دوباره تست کردم.
کاملا جواب میده.
تست کنید ببنید این رویداد برای تمام سطراتون اتفاق میفته یا نه؟

zahra111
سه شنبه 29 اردیبهشت 1388, 20:05 عصر
من این کد رو دوباره تست کردم.
کاملا جواب میده.
تست کنید ببنید این رویداد برای تمام سطراتون اتفاق میفته یا نه؟
من با یه messagebox تعداد فراخوانی های این رویداد رو تست کردم . وقتی که جدولم 2 تا رکورد داره 5 بار این رویداد فراخوانی میشه که 3 دفعه اول count رو یک می ده و 2 دفعه دیگه مقدار count رو 2 و 3 می ده.

mahdi_7610
پنج شنبه 25 تیر 1388, 09:40 صبح
به نظرم روش زیر بهترین روش هستش

http://www.c-sharpcorner.com/UploadFile/santowebster/AutonumberingDatatable12102008090717AM/AutonumberingDatatable.aspx

موفق باشید

5mmmmm
پنج شنبه 25 تیر 1388, 12:28 عصر
این مشکل من هم است.
فکر کنم از لیست ویو استفاده کنم مشکل حل بشه.

کد sql برای اینکار وجود داره؟البته فیلدی با نوع entity مشکلش همینه که اگه یه سطری را حذف کنیم باز هم به روند صعودیش ادامه می ده و در اینصورت برای نمایش بصورت شمارنده مناسب نیست.

seven7777777
پنج شنبه 25 تیر 1388, 16:55 عصر
به نظر من بهترین روش همون متد CellFormmating هست . من باهاش کار کردم و فعلا مشکلی نداشتم ، تا در آینده چی اتفاق بیافته .