PDA

View Full Version : سوال: مشکل در grid view



sm_tahery
یک شنبه 03 آذر 1387, 23:28 عصر
سلام دوستان - من يه grid view تو صفحهم دارم که يه ستون checkbox داره ولي نميدونم چطوري ميشه کاري کرد که بشه checkbox ها در زمان اجرا فعال باشند و بشه اونها راتغيير داد.
جستجو هم کردم چيزي تو سايت پيدا نکردم.
ممنون ميشم اگه کمک کنيد.

Saber_Fatholahi
دوشنبه 04 آذر 1387, 02:26 صبح
ببین دوست من اول باید یه ستون تمپلیت به گرید ویوت اضافه کنی، بعد توی حالت Edit Template یه چک باکس قرار بدی و اونو به فیلد مورد نظرت بایند کنی من توی این پروژه ها که گذاشتم روی سایت کار کردم روش می تونی ببینی اگه اشکالی داشتی مطرح کنی

r_mehrizi
دوشنبه 04 آذر 1387, 10:32 صبح
يك نمونه كد كه ميتونه كمكتون كنه



<asp:GridView ID="GridView1" runat="server" Width="95%"
ShowFooter="True" skinid="Elham" AllowPaging="true"
DataKeyNames="id" OnRowCommand="doInsert" PageSize="15" >
<Columns>
<asp:TemplateField HeaderText="شماره&lt;br&gt;ردیف">
<ItemTemplate>
<asp:Literal ID="litRowNumberNormal" runat="server"></asp:Literal>
</ItemTemplate>
<FooterTemplate>
<asp:Literal ID="litRowNumberFooter" runat="server"></asp:Literal>
</FooterTemplate>
<ItemStyle HorizontalAlign="Center" />
<FooterStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="عنوان">
<ItemTemplate>
<%#Eval("name")%>
</ItemTemplate>
<FooterTemplate>
<span dir="ltr">
<asp:TextBox ID="txt_name1" onkeypress="FKeyPress(this)" onkeydown="FKeyDown(this)" runat="Server" MaxLength="50" />
</span>
</FooterTemplate>
<EditItemTemplate>
<span dir="ltr">
<asp:TextBox ID="txt_name" Text='<%# Bind("name") %>' runat="server" MaxLength="50" />
</span>
</EditItemTemplate>
</asp:TemplateField>

<asp:CommandField ShowEditButton="True" ButtonType="Button" UpdateText="ثبت" CancelText="انصراف"
EditText="ویرایش" HeaderText="ویرایش">
</asp:CommandField>
<asp:TemplateField HeaderText="حذف">
<FooterTemplate>
<asp:Button CommandName="Delete" Text="حذف" ID="btnRemove" runat="server" />
</FooterTemplate>
<ItemTemplate>
<asp:CheckBox ID="ChkRemove" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<table cellspacing="1" cellpadding="3" border="0" class="EmptyTable">
<tr class="EmptyHeader">
<th align="center" scope="col">
شماره ردیف</th>
<th align="center" scope="col">
عنوان</th>

</tr>
<tr class="EmptyRow">
<td align="center">
1</td>
<td>
<span dir="rtl">
<asp:TextBox ID="txt_empty_name" runat="Server" CssClass="GridItem"/>
</span>
</td>

</tr>
<tr class="EmptyRowInsert">
<td align="center" colspan="7" class="EmptyRowInsert">
<asp:Button ID="btnEmptyAdd" runat="server" CommandName="EmptyInsert" BackColor="#FFC080"
BorderWidth="1px" BorderStyle="Solid" Font-Names="tahoma" Font-Size="11px" Text="اضافه" />
</td>
</tr>
</table>
</EmptyDataTemplate>
</asp:GridView>



ProtectedSub GridView1_RowDeleting(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
Dim chkRemove As WebControls.CheckBox
Dim strIDs AsString = ""
Dim boolCheck AsBoolean = False
Dim cls AsNew clscodings
ForEach gvRow As GridViewRow In GridView1.Rows
chkRemove = DirectCast(gvRow.FindControl("ChkRemove"), WebControls.CheckBox)
If chkRemove.Checked Then
boolCheck = True
cls.Delete(dropTable.SelectedValue.Trim, GridView1.DataKeys(gvRow.RowIndex).Value)
EndIf
Next
If boolCheck = TrueThen
BindGridView(dropTable.SelectedValue.Trim)
EndIf
EndSub

sm_tahery
دوشنبه 04 آذر 1387, 19:55 عصر
ممنون مشکل اول حل شد ولي يه سوال ديگه اينکه چطوري ميتونم به مقدار checkbox را بخوانم. از اين کد استفاده کردم جواب نداد.

protected void btnSave_Click(object sender, EventArgs e)
{
string asd;
asd=GridView1.TemplateControl.FindControl("cbRecord");
}
درضمن من از vb سردرنميارم.اگه ميشه با c# جواب بدين مرسي.

alishirazi
دوشنبه 04 آذر 1387, 22:28 عصر
تا اونجایی که من میدونم باید اینطوری گیرش بیاری

(gridView.Rows[10].FindControl("yourElement") as CheckBox)اول ایندکس Row مورد نظر رو داشته باشی بعد با کد بالا پیداش کنی.

sm_tahery
جمعه 08 آذر 1387, 15:37 عصر
تا اونجایی که من میدونم باید اینطوری گیرش بیاری
کد:
(gridView.Rows[10].FindControl("yourElement") as CheckBox)
اول ایندکس Row مورد نظر رو داشته باشی بعد با کد بالا پیداش کنی.

علي جان خيلي ممنون از جوابت.
ولي مشکل من حل نشد ، من دستور شما را به صورت زير داخل يه ليبل ريختم که جوابش به صورت زير شد:

test.Text = (GridView1.Rows[0].FindControl("cbRecord") as CheckBox).ToString();
جواب:
System.Web.UI.WebControls.CheckBox

sm_tahery
شنبه 09 آذر 1387, 22:58 عصر
کسي که جواب نداد ولي مشکل بالايي هم حل شد. حالا يه مشکل ديگه
چطوري ميشه به مقدار يه سلول از gridview دست پيدا کرد البته تو سي شارپ.
اين کد جواب نداد.
GridView1.Rows[0].Cells[2].Controls[0].Text

sara_B
شنبه 16 آذر 1387, 17:31 عصر
کسي که جواب نداد ولي مشکل بالايي هم حل شد. حالا يه مشکل ديگه
چطوري ميشه به مقدار يه سلول از gridview دست پيدا کرد البته تو سي شارپ.
اين کد جواب نداد.
کد:
GridView1.Rows[0].Cells[2].Controls[0].Text

با سلام
براي دسترسي به كنترلهاي گريد ويو و مقادير آنها ، ابتدا بايد ايندكس Row مورد نظررا به دست آوريد :
راه حل :
به دست آوردن ايندكس سطرهاي گريد ويو در رويداد هاي :
1- در رويداد RowUpdating :

int idx = e.RowIndex;
2- در رويداد RowEditing:

int idx = e.NewEditIndex;
3- در رويداد RowCommand :

int idx = Convert.ToInt32(e.CommandArgument);
4- اگر هم سطر خاصي رو مي خوايد كه مثل مثال خودتون عدد بهش مي ديد (مثلا 10 )

حالا كافيه واسه بدست آوردن مقادير درون سلول ها كد زير را وارد نماييد:
مثال # 1 : مثلا اينجا يك مقدار از نوع string به نام Value_Of_MyGrid تعريف كردم و مقادير اولين ستون از گريد ويو كه درون سطر idx است ، را درون آن ريختم :

نكته : شماره ي ستون هاي گريد ويو از صفر شروع مي شود ، يعني ستون اول ، مي شه شماره ي 0 ، ستون دوم شماره ي 1 و الي آخر.

string Value_Of_MyGrid = ((TextBox)GridView1.Rows[idx].Cells[0].Controls[0]).Text;
دستور بالا در واقع ، سلول هاي گريد ويو را به textBox تبديل كرده و مقدار آن را به شما بر مي گرداند .

مثال # 2 : يه مثال ديگه براي FileUpload: (واسه وقتي كه توي يه TemplateField ، يه FileUpload داشته باشيد و نياز به مقداري كه توي FileUpload هست داشته باشيد:

نكته 1: دقت كنيد كه Template Field شما درون ستون شماره ي چند هست ، مثلا اينجا templateField من توي ستون شماره ي 8 هست :

نكته 2 : نام FileUpload ي كه توي مثال من در TemplateField هست ، FileUpload2 است

string Value_Of_FileUpload = ((FileUpload)GridView1.Rows[e.RowIndex].Cells[8].FindControl("FileUpload2")).FileName;

مثال # 3 : اينم يه مثال ديگه واسه وقتي كه توي Template Field ، يه DropDownList گذاشته باشيد (اينجا هم DropDownList داخل templateField ي هست كه در ستون شماره ي 14 قرار داده شده و نام DropDownList در اين مثال DropDownList7 است )



string Value_Of_DropDownList =((DropDownList)GridView1.Rows[e.RowIndex].Cells[14].FindControl("DropDownList7")).SelectedItem.Value;