PDA

View Full Version : سوال: ایجاد کردن سطر در gridview برای یک فیلد



sanazkh
چهارشنبه 25 مرداد 1391, 10:59 صبح
با سلام
میخواستم بدونم چگونه می توانم اطلاعات یک فیلد از جدولم را که می خواهم در gridview نمایش دهم را تغییر دهم ،مثلا در جدول 152-154-175-785 می باشد ولی می خواهم در grid view به صورت زیر باشد
1 152
154
175
785
2 150
151
و.....یعنی اطلاعات یک رکورد را براساس - جدا کنم و یک </br> بگذارم
ممنون

hamidkh
چهارشنبه 25 مرداد 1391, 11:27 صبح
سلام
توی رویداد GridView1_RowDataBound کدی که میخواین رو بنویسین:



if (e.Row.RowIndex>-1)
e.Row.Cells[1].Text = e.Row.Cells[1].Text + e.Row.RowIndex;

sanazkh
چهارشنبه 25 مرداد 1391, 12:07 عصر
سلام
خیلی ممنون
ولی متوجه نشدم ،میشه واضح تر بفرمایید

mehdi_gerami65
چهارشنبه 25 مرداد 1391, 12:16 عصر
سلام
خیلی ممنون
ولی متوجه نشدم ،میشه واضح تر بفرمایید


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

sanazkh
چهارشنبه 25 مرداد 1391, 12:24 عصر
مرسی آقا
من این کد رو دارم
SqlConnection objConnection = new SqlConnection("Data Source=.;Initial Catalog=sepehr; Integrated Security=True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet objDataSet = new DataSet();
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "SELECT Name,code1,code2 FROM T_knob";
objConnection.Open();
objDataAdapter.Fill(objDataSet, "T_knob");

Grdview.DataSource = objDataSet.Tables["T_knob"].DefaultView;
// Grdview.DataMember = "T_knob";
Grdview.DataBind();
objDataAdapter = null;
objConnection = null;
// objConnection.Close();
ولی نمی دونم کجا باید بزارم ،من زیاد وارد نیستم اولین پروژه ام است .
می خواهم بگم فیلد code1 را وقتی می خواند اگر به - رسید یک خط برود پایین ؟
ممنون میشم کمکم کنید

hamidkh
چهارشنبه 25 مرداد 1391, 12:25 عصر
روشی که دوستمون گفتن درسته
حالا برای راحتی کار شما ببینید اطلاعاتتون توی کدوم خونه گرید-بعد اونو بگیرین توی اون رویدادی گفتم-بعد هر بلایی که میخواین سرش بیارین و دوبازه بذارینش توی همون خونه

string[] str = e.Row.Cells[1].Text.split('-');
string tmp ="";
for(int i=0;i<str.length;i++)
tmp+=str[i]+"<br />";
e.Row.Cells[1].Text = tmp+ "<br />";


رویداد GridView1_RowDataBound رو ایجاد کنید و این کد رو اونجا بنویسین

sanazkh
چهارشنبه 25 مرداد 1391, 12:38 عصر
ببخشید این رویداد رو چطوری ایجاد کنم و کجا بگذارم ،قبل از آن کدها؟

hamidkh
چهارشنبه 25 مرداد 1391, 12:49 عصر
توی قسمت split یا design روی دیتا گرید کلیک کنید و توی قسمت رویدادها اون رویداد را انتخاب کنید

sanazkh
چهارشنبه 25 مرداد 1391, 13:18 عصر
سلام
من این طوری نوشتم
protected void Grdview_RowDataBound(object sender, EventArgs e)
{
string[] str = e.Row.Cells[3].Text.split('-');
string tmp ="";
for(int i=0;i<str.length;i++)
tmp+=str[i]+"<br />";
e.Row.Cells[1].Text = tmp+ "<br />";
}
درسته؟
پیغام زیر را می ده؟
CS1061: 'System.EventArgs' does not contain a definition for 'Row' and no extension method 'Row' accepting a first argument of type 'System.EventArgs' could be found (are you missing a using directive or an assembly reference?)

hamidkh
چهارشنبه 25 مرداد 1391, 13:24 عصر
سلام
رویدادتون اشتباه- باید اینطوری باشه:


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{
...}


توی قسمت aspx هم این کد رو توی تگ asp:GridView اضافه کنید:


onrowdatabound="GridView1_RowDataBound"

sanazkh
چهارشنبه 25 مرداد 1391, 13:50 عصر
ببخشید بازم پیغام میده
'string' does not contain a definition for 'split' and no extension method 'split' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)

hamidkh
چهارشنبه 25 مرداد 1391, 13:58 عصر
split رو با S بزرگ بنویسید: Split('-')

sanazkh
چهارشنبه 25 مرداد 1391, 14:05 عصر
درست شد:تشویق:
آفرین به شما
خیلی ممنون امیدوارم همیشه موفق باشید

sanazkh
چهارشنبه 25 مرداد 1391, 14:20 عصر
ببخشید بازم پیغام داد
Specified argument was out of the range of valid values.
Parameter name: index

hamidkh
چهارشنبه 25 مرداد 1391, 14:30 عصر
قبل از همه کدهای که زدین این شرط رو بذارین:
if (e.Row.RowIndex>-1)
اگر نشد کدتون رو تور try{} و catch{} قرار بدین.

sanazkh
چهارشنبه 25 مرداد 1391, 17:44 عصر
مشکل این که
وقتی در design به صورت زیر می نویسم
<asp:TemplateField HeaderText="" SortExpression="code2">
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("Code2") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
دیگر آن را نشان نمی دهد.
اما اگر کل gridview را در صفحه aspx.cs بنویسم نشان می دهد.

hamidkh
چهارشنبه 25 مرداد 1391, 18:06 عصر
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Code2") %>'></asp:Label>

sanazkh
سه شنبه 31 مرداد 1391, 12:58 عصر
خیلی ممنون از راهنمایی شما
ولی این کار را هم کردم آن فیلد را خالی نشان می دهد

mehdi_gerami65
سه شنبه 31 مرداد 1391, 13:17 عصر
سلام
رویدادتون اشتباه- باید اینطوری باشه:


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{
...}


توی قسمت aspx هم این کد رو توی تگ asp:GridView اضافه کنید:


onrowdatabound="GridView1_RowDataBound"




سالام به کاربر محترم که سوال پرسیدی چون اولین پروژه شما هست دوست مون بالا یه رویداد رو برای شما معرفی کرده که این رویداد درسته ولی کنترلش برای شما سخته ببینید شما اون فیلدی رو که میخویید سطر ایجاد بشه از دیتا تیبل بکشید بیرون و در یه رشته با کدهای Html سطر رو ایجاد کن قبل از این که انتصاب کنی به گرید ویو ، بعد او رشته ایجاد شده رو داخل دیتا تیبل تو همون سطر بریز بعد انتصاب بده به گرید ویو به همین سادگی باز اگه نتونستی بگید من کدشو مینویسم