PDA

View Full Version : شماره ردیف در datagridview



alirzn
چهارشنبه 24 مرداد 1386, 15:59 عصر
سلام:
چطور میشه به Datagridview یک ستون به عنوان شماره ردیف اضافه کرد؟ البته بدون استفاده از sqlserver؟
یعنی تحت خود #c باشه.
مرسی اگر کمکم کنید

PC2st
چهارشنبه 24 مرداد 1386, 16:57 عصر
dataGridView1.Columns.Add("FieldName", "FieldHeaderText");

alirzn
چهارشنبه 24 مرداد 1386, 17:16 عصر
خوب چطوری میشه که ردیف را به صورت اتوماتیک خودش بزنه؟

PC2st
چهارشنبه 24 مرداد 1386, 17:48 عصر
میتونید برای DataTable یا DataSet این کار رو بکنید و اون رو به DataGridView متصل کنید. مثلا:


DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("AutoNumber", typeof(int));
DataColumn dc2 = new DataColumn("First_Name", typeof(string));
dc1.AutoIncrement = true;
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dataGridView1.DataSource = dt;

کاربر وقتی میخواد یک رکورد جدید رو اضافه کنه، فیلد اول بصورت اتوماتیک بهش یک واحد اضافه میشه و کاربر تنها مقادیر لازم را در فیلد 2 وارد میکنه.

federrer
چهارشنبه 24 مرداد 1386, 19:20 عصر
این کد من :




SqlCommand Cmd = new SqlCommand(strsql, Cnn);

SqlDataAdapter SDA = new SqlDataAdapter(strsql, Cnn);
SDA.SelectCommand = Cmd;

try
{
Cnn.Open();


DataTable dt = new DataTable();
SDA.Fill(dt);
DataColumn dc1 = new DataColumn("radif", typeof(int));

dc1.AutoIncrement = true;
dt.Columns.Add(dc1);

GView.DataSource = dt;

GView.DataBind();

}
یه ستون به اسم radif اضافه میشه ولی هیچ مقداری تو خونه هاش نیست !!!

federrer
چهارشنبه 24 مرداد 1386, 19:31 عصر
راستی باید حتما AutoGenereteColumns= True باشه تا این ستون رو نشون بده ؟؟

من گریدویو رو طوری طراحی کردم که حتما این خاصیت باید مقدار False داشته باشه !!!

PC2st
چهارشنبه 24 مرداد 1386, 20:00 عصر
فکر نمیکنم AutoGenereteColumns تاثیری داشته باشه...

کدتون رو به شکل زیر تغییر بدید:


SqlCommand Cmd = new SqlCommand(strsql, Cnn);
SqlDataAdapter SDA = new SqlDataAdapter(strsql, Cnn);
SDA.SelectCommand = Cmd;
try
{
Cnn.Open();
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("radif", typeof(int));
dc1.AutoIncrement = true;
dt.Columns.Add(dc1);
SDA.Fill(dt);
GView.DataSource = dt;
GView.DataBind();
}

اول column رو اضافه کرده و سپس از متد Fill استفاده کنید.

federrer
پنج شنبه 25 مرداد 1386, 12:20 عصر
آقا دستت درد نکنه . تا اینجا مشکل حل شد، فقط یه زحمت بکش خاصیت AllowGeneralColumns رو برابر False قرار بده و یه تست بکن . برای من که ستونی اضافه نمیشه

حتما می پرسی چه اصرای هست که AllowGenerateColumns=False باشه .

من اینجوری ستونهام رو درست کردم :
تو Property ها خاصیت Columns روی Collation کلیک کردم و از قسمت AvailableFeilds چند تا ستون از نوع BoundField اضافه کردم .

برای اینکه بتونم هدر های ستونها رو فارسی بدم .


در این شرایط حتما باید AllowGenerateColumns=False باشه تا ستونهای پیش فرض گرید ویو اضافه نشه و فقط ستونهایی که خودمون درست کردیم رو نشون بده !!

PC2st
پنج شنبه 25 مرداد 1386, 13:54 عصر
تو Property ها خاصیت Columns روی Collation کلیک کردم و از قسمت AvailableFeilds چند تا ستون از نوع BoundField اضافه کردم .

برای اینکه بتونم هدر های ستونها رو فارسی بدم .
برای فارسی کردن هدر ها نیازی به این کار نیست.


اگر AutoGenerateColumns برابر false باشه:


dataGridView1.AutoGenerateColumns = false;

DataSet ds = new DataSet();
ds.Tables.Add("Table1");

ds.Tables[0].Columns.Add("Column1", typeof(string));
ds.Tables[0].Columns.Add("Column2", typeof(string));
DataColumn dc = new DataColumn("Column3", typeof(int));
dc.AutoIncrement = true;
ds.Tables[0].Columns.Add(dc);

ds.Tables[0].Rows.Add("WWWWWW", "wwwwww");
ds.Tables[0].Rows.Add("QQQQQQ", "qqqqqq");

DataGridViewColumn dgc = new DataGridViewColumn();
dgc.HeaderText = "Column2";
dgc.ValueType = typeof(int);
dgc.DataPropertyName = "Column2";
dgc.CellTemplate = new DataGridViewTextBoxCell();
DataGridViewColumn dgc2 = new DataGridViewColumn();
dgc2.HeaderText = "Column3";
dgc2.ValueType = typeof(int);
dgc2.DataPropertyName = "Column3";
dgc2.CellTemplate = new DataGridViewTextBoxCell();
dataGridView1.Columns.Add(dgc);
dataGridView1.Columns.Add(dgc2);

dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Table1";

federrer
پنج شنبه 25 مرداد 1386, 17:51 عصر
بی سوادی هم بد دردیه :خجالت:

dgc و dgc2 رو نمی تونم تعریف کنم چون :

The type or namespace name 'DataGridViewColumn' could not be found

من این NS ها رو Import کردم:




using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

PC2st
پنج شنبه 25 مرداد 1386, 18:11 عصر
ببخشید، از فضای نامهائی که دارید به نظر میآد یک وب اپلیکیشن باشه!
دوست عزیز، شما از کنترل DataGridView یا DataGrid یا ... چه کنترلی استفاده میکنید؟

federrer
پنج شنبه 25 مرداد 1386, 18:53 عصر
بله . دارم این کد رو واسه یه سایت ASP.net که با C# می نویسم استفاده می کنم .

تو Windows Application کنترل DataGirdView داریم ولی تو وب اپلیکیشن یه کنترل بسیار شبیهش که اسمش GridView هست داریم که البته بعضی خاصیت هاشون فرق داره .

من از GridView که تو وب اپلیکشن هست استفاده می کنم .

hdv212
پنج شنبه 25 مرداد 1386, 19:39 عصر
دوست عزیز فکر میکنم به جای DataGridViewColumn ، دنبال اسمی تو مایه های GridViewColumn بگردی، ببین اسمش توی فیلدهای GridView ات چیه، احتمالا همینی هست که گفتم.

iman_s52
چهارشنبه 18 مهر 1386, 11:05 صبح
میتونید برای DataTable یا DataSet این کار رو بکنید و اون رو به DataGridView متصل کنید. مثلا:


DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("AutoNumber", typeof(int));
DataColumn dc2 = new DataColumn("First_Name", typeof(string));
dc1.AutoIncrement = true;
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dataGridView1.DataSource = dt;


من ستون ردیف رو دستی به دیتاستم اضافه کردم مربوط به یک گزارش ـ ولی با هر با Fill کردن به مقدار قبلی اضافه میشه ( صفر نمیشه )

PC2st
چهارشنبه 18 مهر 1386, 21:33 عصر
راهی به ذهنم نمیرسه جز اینکه فقط اون ستون رو حذف کرده و دوباره از اول ایجادش کنید و سپس دیتاتیبل رو Fill کنید. :-/

hassan razavi
چهارشنبه 18 مهر 1386, 23:59 عصر
دوست عزیز قبل از هر بار Fill کردن یکبار Datatable را Clear کنید

iman_s52
پنج شنبه 19 مهر 1386, 08:05 صبح
من از DataSet استفاده میکنم و اونو هم قبل از Fill کردن Clearمی کنم.