ورود

View Full Version : سوال: انتخاب یک سطر گرید بدون اینکه لینک select وجود داشته باشد



monire.6767
دوشنبه 16 اردیبهشت 1392, 11:33 صبح
سلام
من جستجو کردم ولی چیزی که کمکم کنه پیدا نکردم میخوام با کلیک رو یه سطر اون انتخاب بشه و محتویاتشو بریزم توی چند تا lable

ahmad156
دوشنبه 16 اردیبهشت 1392, 12:17 عصر
از TemplateField استفاده کنین.طراحی ستون رو با Table یا Div انجام بدین.کل ستون رو درون تگ <a> قرار بدین و اون طرف هم در RowCommand اطلاعاتتون رو دریافت کنین.
موفق باشین

monire.6767
دوشنبه 16 اردیبهشت 1392, 13:09 عصر
ولی نمیدونم توی <a>چطور rowcommand بزارم میشه بیشتر راهنماییم کنید

ahmad156
دوشنبه 16 اردیبهشت 1392, 13:18 عصر
یکی از کنترل ها درون جدول یا همون درون تگ <a> رو CommandName نسبت بدین.توی RowCommand میتونین به کل سطر با اون CommandName دسترسی داشته باشین

DeveloperStudio
دوشنبه 16 اردیبهشت 1392, 13:24 عصر
به این صفحه برو :

آموزش کنترل GridView (http://developer1.ir/ASP_NET/GridView/OverView.aspx)

monire.6767
دوشنبه 16 اردیبهشت 1392, 13:27 عصر
من گریدو میشناسم فقط الان نمیدونم تویه اون <a>چطوری بگم بره تو رخداد selectchanging

monire.6767
دوشنبه 16 اردیبهشت 1392, 13:35 عصر
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="Id_class" DataSourceID="LinqDataSource1"
onselectedindexchanged="GridView1_SelectedIndexChanged">
<Columns>

<asp:TemplateField>
<ItemTemplate>
<table style="width:100%;">
<tr>
<asp:HyperLink ID="HyperLink1" runat="server" CommandName="Select" CommandArgument='<%# Eval("Id_class") %>'>
<td>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("Id_class") %>'></asp:Label></td>
<td>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Tuition") %>'></asp:Label></td>
<td>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Prerequisite") %>'></asp:Label></td>
<td>
<asp:Label ID="Label4" runat="server" Text='<%# Eval("units_name") %>'></asp:Label></td>

<td>
<asp:Label ID="Label5" runat="server" Text='<%# Eval("time") %>'></asp:Label></td>

<td>
<asp:Label ID="Label6" runat="server" Text='<%# Eval("Teacher") %>'></asp:Label></td>

<td>
<asp:Label ID="Label7" runat="server" Text='<%# Eval("day") %>'></asp:Label></td>

<td>
<asp:Label ID="Label8" runat="server" Text='<%# Eval("Start_time") %>'></asp:Label></td>

<td>
<asp:Label ID="Label9" runat="server" Text='<%# Eval("End_time") %>'></asp:Label></td>

</asp:HyperLink>
</tr>

</table>
</ItemTemplate>
</asp:TemplateField>



</Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="schoolDataContext" EntityTypeName="" TableName="tb_classSets">
</asp:LinqDataSource>




این کد گرید هستش ولی با کلیک روی سطر هیچ اتفاقی نمیوفته

ahmad156
دوشنبه 16 اردیبهشت 1392, 20:14 عصر
به جای CommandName="Select"
عبارتی به غیر از Select انتخاب کن(مثلا se).چون این کلمات رزرو شده هست.بعد در event مربوط به گرید ویو(RowCommand) به راحتی قابل دسترس هست
موفق باشین.

zhr.rezae66i
چهارشنبه 25 اردیبهشت 1392, 00:37 صبح
یکی از کنترل ها درون جدول یا همون درون تگ <a> رو CommandName نسبت بدین.توی RowCommand میتونین به کل سطر با اون CommandName دسترسی داشته باشین

سلام
این تگ a که command name نداره
اما مثلا اگه button بزارم که میشه بش command name نسبت داد درست میشه
اما من فقط ی متن نیاز دارم اون قسمت قرار بگیره نه دکمه.

hyperlink هم command name نداشت

اگه ی ستون گیرید رو پنهان کنم و بخام وقتی سطر کلیک شد و به حالت انتخاب در اومد اون مقدار داخل اون ستون پنهان شده ، داخله یک textarea نمایش داده بشه، که نخاد بره از دیتابیس بخونه و زمان بر باشه . چه راهیو پیشنهاد میککنید؟

وقتی command argument رو میخونه مثلا eval("num") اینطوری از دیتا بیس میخونه؟

ahmad156
چهارشنبه 25 اردیبهشت 1392, 08:27 صبح
سلام
راست میگی حواسم نبود:اشتباه:
خب شما میتونین دورش بزنین button بذارین و style زیر رو بهش بدین تا لینک به نظر بیاد:لبخند:

style="border: none; background-color: inherit; cursor: pointer"

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

ImageButton lnkBtn = (ImageButton)e.CommandSource
GridViewRow myRow = (GridViewRow)lnkBtn.Parent.Parent
Var val= yourGv.Rows[myRow.RowIndex][columnIndex];

مورد سوم هم شما وقتی DataSource رو برای GridView تنظیم میکنین از تابع Eval یا Bind برای نسبت دادن اطلاعات به GridView استفاده میشه.تابع بالا میگه که ستونی که نامش num هست رو به این کنترل نسبت بده
موفق باشین

zhr.rezae66i
چهارشنبه 25 اردیبهشت 1392, 09:26 صبح
برای سوال دومتون هم ستون رو مخفی کنین و به روش زیر مقدار اون ستون رو بدست بیارین

ImageButton lnkBtn = (ImageButton)e.CommandSource
GridViewRow myRow = (GridViewRow)lnkBtn.Parent.Parent
Var val= yourGv.Rows[myRow.RowIndex][columnIndex];

image button برای چی اینجا میزارید؟
میخام سطر قابل انتخاب باشه و وقتی انتخاب میشه رنگش تغییر کنه. درواقع میگید وقتی روی image button کلیک شد بره و نمایش بده؟
نمیشه کله سطر قابل انتخاب باشه؟ روش کلیک کنه

ahmad156
چهارشنبه 25 اردیبهشت 1392, 10:21 صبح
منظورم همون button هستش.نمونه کد خودم بود همین جوری کپی کردم.
پیشنهاد من این هستش که شما در RowCommand شماره سطر یا کلید سطر رو در viewstate ذخیره کنین و بعد از اون در RowDataBound رنگ سطر مورد نظرتون رو تغییر بدین.

ahmad156
چهارشنبه 25 اردیبهشت 1392, 10:26 صبح
این هم نمونه اش

if (e.Row.RowType == DataControlRowType.DataRow)
{
if (Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "yourKey")) == ViewState["yourKey"])
{
e.Row.BackColor = System.Drawing.Color.YellowGreen;
}
}

zhr.rezae66i
چهارشنبه 25 اردیبهشت 1392, 11:09 صبح
میبخشی
من ی button از نوع template گذاشتم توی گیرید
و در رخداد rowCommand نوشتم
Button Btn = (Button)e.CommandSource;
GridViewRow myRow = (GridViewRow)Btn.Parent.Parent;
//TxtContain.Text = GridView1.Rows[myRow.RowIndex][9];

column index خطا داره. ایندکس ستون مورد نظرم 9 هست

ahmad156
چهارشنبه 25 اردیبهشت 1392, 12:17 عصر
مطمئن هستید 9 تا ستون داره؟(در نظر میگیرید که از 0 شروع میشه!)
از اینکه مقدار داره این ستونتون مطمئن هستید؟

ahmad156
چهارشنبه 25 اردیبهشت 1392, 18:24 عصر
من کد بالا رو چندین بار استفاده کردم هیچ مشکلی نداشته.مشکل حتما جای دیگه ای هست.در ضمن با BreakPoint بررسی کنین مشکل رو بهتر میتونین مدیریت کنین

zhr.rezae66i
چهارشنبه 25 اردیبهشت 1392, 18:38 عصر
مراحلی که رفتم درسته؟
یعنی یک button درست کنم توی گیرید، تغییری باید توی button بدم؟
بعد این کدها رو در رخداد row comman گیرید بنویسم. حتما مشکلی هست چون من ربط این Button Btn = (Button)e.CommandSource;
به button داخل گیرید رو نمیدونم
میشه تیکه کدتونو بزارید لطفا

ahmad156
چهارشنبه 25 اردیبهشت 1392, 19:04 عصر
if (e.CommandName == "ply")
{
ImageButton imgBtn = (ImageButton)e.CommandSource;
GridViewRow myRow = (GridViewRow)imgBtn.Parent.Parent;
GridView myGrid = (GridView)sender;
string lastcallid = gvRecording.DataKeys[myRow.RowIndex].Value.ToString();
}

و این

<asp:TemplateField HeaderText="مکالمه">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CommandName="ply" ImageUrl="~/images/icn_play.png"
CommandArgument='<%# Eval("startdate") %>' />
</ItemTemplate>
</asp:TemplateField>

و مشخصات گرید هم

<asp:GridView ID="gvRecording" runat="server" Width="666px" DataKeyNames="lastcallid"
AutoGenerateColumns="False" AllowPaging="false" AlternatingRowStyle-CssClass="alt"
PagerStyle-CssClass="pgr" CssClass="mGrid" OnRowCommand="gvRecording_RowCommand"
OnRowDataBound="gvRecording_RowDataBound">

البته من اینجا از DataKeyName استفاده کردم ولی نباید فرقی کنه!

na_des
چهارشنبه 25 اردیبهشت 1392, 19:31 عصر
نقل قول: انتخاب یک سطر گرید بدون اینکه لینک select وجود داشته باشد
سلام
104243

zhr.rezae66i
یک شنبه 29 اردیبهشت 1392, 08:19 صبح
این هم نمونه اش

if (e.Row.RowType == DataControlRowType.DataRow)
{
if (Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "yourKey")) == ViewState["yourKey"])
{
e.Row.BackColor = System.Drawing.Color.YellowGreen;
}
}

شرمنده ولی من این your key که نوشتیدو نمیدونم دقیقا چی باید بزارم. من row indrx سطری که میخام رنگش عوض بشه رو دارم. و رنگشم تغییر میتونم بدم با کد زیر. اما وقتی دوباره دکمه show رو میزنم سطر جدید رنگی میشه و رنگ سطر قبلی هم باقی میمونه. که نباید اینطور بشه.

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "APP")
{

Button Btn = (Button)e.CommandSource;
GridViewRow myRow = (GridViewRow)Btn.Parent.Parent;
Txt.Text = GridView1.DataKeys[myRow.RowIndex].Value.ToString();
myRow.BackColor = System.Drawing.Color.LightBlue;
}
}


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "this.origcolor=this.style.backgroundColor;" + " this.style.backgroundColor='#dddddd';");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.origcolor;");
GridView1.RowStyle.BackColor = System.Drawing.Color.White;

}

}

ahmad156
یک شنبه 29 اردیبهشت 1392, 10:13 صبح
برای RowDataBound یه If بزارین که اگر شرط برقرار نبود رنگ پیش فرض رو تنظیم کنه

zhr.rezae66i
یک شنبه 29 اردیبهشت 1392, 11:01 صبح
منکه متوجه نشدم بخدا
همینم که داخل rowdata bound نوشتم باعث نمیشه اون سطرای قبلی رنگشون به حالت اول برگرده

ahmad156
یک شنبه 29 اردیبهشت 1392, 11:15 صبح
شما مگه نمیخواین در یک زمان فقط یه سطر رنگی باشه؟
خب توی RowDataBound فقط برای اون سطری که شرط برقراره رنگی شدن اجرا و برای بقیه همون رنگ سفید!

zhr.rezae66i
یک شنبه 29 اردیبهشت 1392, 11:53 صبح
نمیشه
چون دکمه show text رو که میزنم از نو rowdata bound صدا زده نمیشه که!
دکمه show text باعث لود مجدد گیرید نمیشه آخه. نبایدم بشه

ahmad156
یک شنبه 29 اردیبهشت 1392, 12:07 عصر
قبل از تغییر رنگ سطری توی RowCommand عبارت زیر رو بنویسین

foreach (GridViewRow gridViewRow in yourGv.Rows)
{
gridViewRow.BackColor = System.Drawing.Color.White;
}