Hej Hej igen.Template checkbox i gridview
Har stött på ett problem när jag försöker loopa alla checkbox som finns i en gridview.
Detta är koden:
<asp:GridView ID="gvCustomer" runat="server" AutoGenerateColumns="False" GridLines="None"
CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt"
AllowSorting="True" OnSorting="gvCustomer_Sorting">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkSelected" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Namn" SortExpression="Name" />
<asp:BoundField DataField="Zipcode" HeaderText="Postnr" SortExpression="Zipcode" />
<asp:BoundField DataField="State" HeaderText="Ort" SortExpression="State" />
<asp:BoundField DataField="RowCreated" HeaderText="Inkom" SortExpression="RowCreated" />
</Columns>
<PagerStyle CssClass="pgr" />
<AlternatingRowStyle CssClass="alt" />
</asp:GridView>
<hr />
<asp:Button ID="btnDelete" runat="server" Text="Radera" CssClass="btn" />
<asp:Button ID="btnProcess" runat="server" Text="Bearbeta" CssClass="btn" OnClick="btnProcess_Click" />
Checkbox ligger som en template i Gridview och sidan använder MasterPage.
Problemet är att jag testat att loopa alla kontroller och i loopen köra en FindControll, men den lyckas alltså inte hitta något.
Jag vill alltså kolla vilka CheckBox som är ikryssade t.ex
if(chkSelected.Checked)
Response.Write("Checked");
Någon som har en bra idé om detta?
MVH
AndersSv: Template checkbox i gridview
Löste detta på egen hand och delar även med mig av koden ifall andra stöter på liknande problem.
Detta min gridview:
<asp:GridView ID="gvCustomer" runat="server" AutoGenerateColumns="False" GridLines="None"
CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt"
AllowSorting="True" OnSorting="gvCustomer_Sorting">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkSelected" runat="server" EnableViewState="true" />
<asp:HiddenField ID="hfdID" runat="server" Value='<%# Eval("CRM_InboxId") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Namn" SortExpression="Name" />
<asp:BoundField DataField="Zipcode" HeaderText="Postnr" SortExpression="Zipcode" />
<asp:BoundField DataField="State" HeaderText="Ort" SortExpression="State" />
<asp:BoundField DataField="RowCreated" HeaderText="Inkom" SortExpression="RowCreated" />
</Columns>
<PagerStyle CssClass="pgr" />
<AlternatingRowStyle CssClass="alt" />
</asp:GridView>
Som ni ser så har jag lagt en HiddenField som är mappad till "CRM_InboxId"
Denna kolumn finns även i den DataTable som jag senare kommer att hämta datat ifrån.
Jag hämtar värden från en datatable
private void loadCustomers()
{
gvCustomer.DataSource = _ccd.GetCustomer(0);
gvCustomer.DataBind();
if (gvCustomer.Rows.Count <= 0)
{
btnDelete.Enabled = false;
btnProcess.Enabled = false;
}
}
Ovanstående kod förutsätter att du laddar datatable från t.ex en databas.
Sen loopar jag igenom hela gridview och slår samman alla IDnummer.
private string getIdFromGridView()
{
string value = "";
foreach (GridViewRow gvr in gvCustomer.Rows)
{
CheckBox c = gvr.FindControl("chkSelected") as CheckBox;
HiddenField h = gvr.FindControl("hfdID") as HiddenField;
if (c.Checked)
{
value = value + h.Value + ";";
}
}
return value.Remove(value.Length - 1);
}
Ovanstående kommer alltså bygga ihop samtliga markerade id nummer. Så strängen som returneras kan alltså se ut så här: 25;105;106;124;
Sedan slittar jag strängen till en array där jag kan hantera idnumren en i taget.
Det sista den gör "value.remove(value.Lengt - 1) är helt engelt att ta bort det senaste semicolonet för att få en riktig split på det. Glöm inte att lägga någon som hanterar ifall inga rader har markerats.
Om någon ser hur man kan optimera ovanstående kod så är jag intresserad av det.
MVH
Anders