PDA

View Full Version : قرار دادن شماره ردیف برای dataGrid



zehs_sha
پنج شنبه 13 اسفند 1383, 12:57 عصر
سلام دوستان
چگونه می توانم شماره ردیف برای dataGrid قرار دهم مخصوصا هنگامی که می خواهم تعدادی از رکوردها را نمایش بدهم
http://smileys.smileycentral.com/cat/17/17_1_12v.gif ('http://www.smileycentral.com/?partner=ZSzeb008_ZRxdm297YYIR')

M.GhanaatPisheh
پنج شنبه 13 اسفند 1383, 19:25 عصر
این کار رو باید توی tier پایگاه داده ای انجام بدید
به این صورت که یه Stored Procedure بنویسید که ستون های table رو به همراه ستون شماره سطر برگردونه
از Stored Procedure توی ADO.NEt برای برگرداندن اطلاعات به App استفاده کنید

توی بخش SQL SERVER جناب ثباتی راجع بهش توضیح دادن.

مهدی کرامتی
پنج شنبه 13 اسفند 1383, 23:22 عصر
راحت تر از اینهم میشه. با یک تابع تو Code-Behind که در هر بار فراخوانی یکی به مقدار یک متغیر (فیلد) تعریف شده در کلاس مربوطه اضافه میکنه میشه این کار رو انجام داد. بعد این تابع رو در اون ستون از دیتاگرید فراخوانی کنید.

M.GhanaatPisheh
جمعه 14 اسفند 1383, 01:59 صبح
Code-Behind

این مفهوم اینجا کاربرد نداره دوست عزیزم
ASP.NET
MVC Pattern !!??

مهدی کرامتی
جمعه 14 اسفند 1383, 12:24 عصر
کسی نگفت که برای ASP.NET میخواد یا برای WinForms، بنابراین من فرض رو برای اولی گرفتم.

M.GhanaatPisheh
جمعه 14 اسفند 1383, 22:08 عصر
راجع به مفهوم Code-Behind :

تکنیک Code-Behind در واقع بر گرفته شده از MVC Pattern هست که View رو از Controller جدا می کنه
همون تکنیکی که توی ASP.NET ازش استفاده می کنیم و اسم مایکروسافتیش رو هم
گذاشتند Code-Behind
MVC = Model View Controller

اگر طرفدار داشته باشه یه مقاله راجع به Patternهای NET.ی دارم ترجمه می کنم
Upload میکنم

M.GhanaatPisheh
جمعه 14 اسفند 1383, 22:11 عصر
البته دوست خوبم آقای کرامتی
Post قبلی برای اطلاع عموم بود


کسی نگفت که برای ASP.NET میخواد یا برای WinForms، بنابراین من فرض رو برای اولی گرفتم.
یه لحظه سوء تفاوت شد. :wink:

zehs_sha
شنبه 15 اسفند 1383, 10:58 صبح
:sorry: متاسفانه مقبول نیفتاد

این کار رو باید توی tier پایگاه داده ای انجام بدید
به این صورت که یه Stored Procedure بنویسید که ستون های table رو به همراه ستون شماره سطر برگردونه
از Stored Procedure توی ADO.NEt برای برگرداندن اطلاعات به App استفاده کنید

متاسفانه بانک accsess است و winforms

C# Programmer
شنبه 15 اسفند 1383, 20:55 عصر
سلام یه راه حل برای شماره ردیف پیدا کردم اصولی نیست ولی کار راه اندازه شرایطتش اینه که اولا فیلد اول یه فیلد خالی یا به درد نخور باشه دوما مرتب سازی بوسیله Query باشه نه بوسیله dataGrid این کد رو هر جا که dataSet رو Fill میکنین اضافه کنین بجای اولین ستون جدول شماره ردیف رو اضافه میکنه طبق نظر کارشناسای دیتا بیس در همین سایت روش اصولی برای این کار در دیتا بیس وجود نداره و روش هایی که من دیدم با شیره مالیدن سر دیتا بیس انجام شده و برای تعداد رکورد های زیاد کارایی نداره به هر حال اگه روش بهتری میشناسین ما رو بی نصیب نذارین ممنون :wink: :موفق:



for(int i=1; i<dataSet11.Tables[0].Rows.Count+1; i++)
{
dataSet11.Tables[0].Rows[i-1][0] = i.ToString() ;
}

shabnam_f
شنبه 15 اسفند 1383, 22:58 عصر
سلام
منم یه راه حل کشف کردم که به قول دوستمون اونم یه جور شیره مالیدنه!
همونطور که گفتن یه ستون اضافی که به جایی bind نشده باشه به datagrid اضافه می کنیم مثلا ستون 3 بعد

int i=1;
foreach(DataGridItem item in DataGrid1.Items)
{
item.Cells[3].Text=i.ToString();
i++;
}
مشکل منو که حل کرد.

small_programmer
یک شنبه 16 اسفند 1383, 00:14 صبح
سوال جالبی مطرح کردین و جواب مناسبی هم براش وجود داره
خلاصه اش این میشه که یک ستون از نوع int ایجاد می کنیم و مقدار AutoIncrement آنرا true می کنیم و سپس از متد Fill استفاده می کنیم و تمام. به طور خودکار شماره گذاری انجام می شه.
در زیر مثال آن آورده شده است


DataColumn c1=new DataColumn("RowNo",typeof(int));
c1.AutoIncrement=true;
c1.AutoIncrementSeed=1;
c1.AutoIncrementStep=1;
DataTable t1=new DataTable();
t1.Columns.Add(c1);
sqlDataAdapter1.Fill(t1)
امیدوارم به درد جناب C# Programmer هم بخوره
:موفق:

C# Programmer
دوشنبه 17 اسفند 1383, 12:16 عصر
small_programmer ممنون
این راهی که گفتی مثل همون راهیه که من گفتم یعنی باز هم تو مرتب سازی به هم میریزه
اما فکر کنم اصولی تر باشه
به هر حال ممنون :wink:

zehs_sha
سه شنبه 18 اسفند 1383, 14:37 عصر
سلام به همه
متشکرم از لطف همگی

این کد رو هم ببینید:

1 - یک کلاس ایجاد کنید که :



public class MyDataGrid : DataGrid
{
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
DataGrid.HitTestInfo hti = this.HitTest(new Point(e.X, e.Y));
if(hti.Type == DataGrid.HitTestType.RowResize)
{
return; //no baseclass call
}
base.OnMouseMove(e);
}
}

2-و همچنین 2 متغیر زیر را :



private MyDataGrid dataGrid1;
private Point pointInCel;



4-این خط را در formload اضافه کنید:



this.pointInCel = new Point(dataGrid1.GetCellBounds(0,0).X + 4, dataGrid1.GetCellBounds(0,0).Y + 4);


5-متد زیر را نیز داخل کلاس فرم اضافه کنید


public int TopRow(){
DataGrid.HitTestInfo hti = dataGrid1.HitTest(this.pointInCel);
return hti.Row;
}


6- این کد را در رویداد(Event) شی dataGrid1_Paint اضافه کنید.



private void dataGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

int row = TopRow();

int yDelta = dataGrid1.GetCellBounds(row, 0).Height + 1;

int y = dataGrid1.GetCellBounds(row, 0).Top + 2;



CurrencyManager cm = (CurrencyManager) this.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];

while(y < dataGrid1.Height - yDelta && row < cm.Count)

{

//get & draw the header text...

string text = string.Format("row{0}", row);

e.Graphics.DrawString(text, dataGrid1.Font, new SolidBrush(Color.Black), 12, y);

y += yDelta;

row++;

}

}



:موفق: در این روش در حالت سورت نیز ردیف ها نیز درست خواهند بود؟

اما مشکلی که دارد این است اگر با Scroll کردن datagrid ردیف ها درج نمی شوند؟

علی فتحی
یک شنبه 15 شهریور 1394, 18:12 عصر
اینم کد

private void dataGridViewX1_DataBindingComplete(objec for (int i = 0; i < this.dataGridViewX2.Rows.Count; i++)
{
this.dataGridViewX2.Rows[i].HeaderCell.Value = (i + 1).ToString();
foreach (DataGridViewRow row in dataGridViewX2.Rows)
{
this.dataGridViewX2.RowHeadersDefaultCellStyle.Ali gnment = DataGridViewContentAlignment.MiddleCenter;


}


dataGridViewX2.ClearSelection();
int nRowIndex = dataGridViewX2.Rows.Count - 1;