---
title: "problem med RadioButton i GridView"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/168093-problem-med-radiobutton-i-gridview"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Vinnaren"
published: "2008-01-14T12:08:43.000Z"
updated: "2008-01-15T09:41:31.000Z"
replies: 10
views: 606
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/168093-problem-med-radiobutton-i-gridview"
---

# problem med RadioButton i GridView

## #1 — Vinnaren, 2008-01-14T12:08Z

Har GridView:n:

```
    <asp:GridView 
        DataKeyNames="PayId" 
        ID="gvPayWay" 
        runat="server" 
        AutoGenerateColumns="False" 
        AllowPaging="false" 
        CssClass="gvPayWay"  
        GridLines="None"     
        AllowSorting="false" 
        EmptyDataText="Det finns inga betalsätt att välja mellan" 
        DataSourceID="PayWayObjectDataSource">
        <Columns>
            <asp:TemplateField HeaderText="Betalsätt">
                <ItemTemplate>
                    <label>
                        <asp:RadioButton ID="rbtnPayWay" GroupName="PayWay" runat="server" />
                        <asp:Label ID="Label1" runat="server" Text='<%#Eval("Name") %>' />
                    </label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Kostnad">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%#Eval("Price") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>    
    </asp:GridView>
    
    <asp:Button ID="btnPayWay" runat="server" Text="Vidare" />
```

Nu vill jag antingen direkt när man klickar i RadioButton eller när man klickar på knappen btnPayWay skapa en session innehållande PayId för den RadioButton som är markerad.

Hör löser man detta??

Tacksam för aää hjälp  :stud

Permalänk: https://www.webforum.nu/p/168093

## #2 — CatZ, 2008-01-14T12:32Z

du får lägga till ett command.

```
<asp:RadioButton ID="rbtnPayWay" GroupName="PayWay" runat="server" CommandName="myCommand" CommandArgument='<%#Eval("PayID") %>' OnCommand="ExecuteTheCommand"/>
```

Sedan i code behind 

```
protected void ExecuteTheCommand(object sender, CommandEventArgs e)
{
    Session("PayID") = e.CommandArgument;
}
```

Permalänk: https://www.webforum.nu/p/2070259

## #3 — Vinnaren, 2008-01-14T12:53Z

tack, men det fungerar inte, händer ingenting dvs Session får inget värde.

Finns OnCommand, CommandName, CommandArgument på RadioButton? Får inte upp dem i egenskaperna på kontrollen.

Måste väll gå att lösa på något sätt?   :stud

Permalänk: https://www.webforum.nu/p/2070263

## #4 — MikeEast, 2008-01-14T12:55Z

Det tråkiga med CatZ förslag är att RadioButton inte implementerar IButtonControl, som t.ex. Button gör. Det finns helt enkelt ingen property som heter CommandName på RadioButton.

Mitt förslag är tyvärr lite småsunkigt, men jag kommer inte på något bättre just nu:

```
<asp:TemplateField HeaderText="Betalsätt">
    <ItemTemplate>
        <label>
            <asp:RadioButton ID="rbtnPayWay" GroupName="PayWay" runat="server" AutoPostBack="true" OnCheckedChanged="rbtnPayWay_CheckedChanged" />
            <asp:Label ID="Label1" runat="server" Text='<%#Eval("Name") %>' />
            <asp:label runat="server" id="lblPayId" Text='<%# Eval("PayId") %>' Visible="False" />
        </label>
    </ItemTemplate>
</asp:TemplateField>
```

code-behind:

```
protected void rbtnPayWay_CheckedChanged(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if(rb == null)
        return;

    // Om kontrollen du vill åt ligger i samma "cell" (samma templatefield)
    DataControlFieldCell cell = rb.Parent as DataControlFieldCell;
    if(cell == null)
        return;

    // Om kontrollen du vill åt ligger på samma rad, men i ett annat templatefield
    // eller om du vill komma åt dataItem för raden. Det innebär dock att GridView 
    // måste vara databound (row.DataItem)
    //GridViewRow row = rb.Parent.Parent as GridViewRow;
    //if (row != null)
    //    return;

    Label lblPayId = cell.FindControl("lblPayId") as Label;
    if(lblPayId == null)
        return;

    int payId;
    Int32.TryParse(lblPayId.Text, out payId);

    Session["PayId"] = payId;
}
```

Det känns alltid som om man gör något fel när man börjar navigera uppåt med .Parent, men jag tror att detta kan funka ganska bra ändå.

::m

Permalänk: https://www.webforum.nu/p/2070265

## #5 — CatZ, 2008-01-14T12:55Z

precis, kolla på egenskaperna för knappen så hittar du nog något som passar :) Det jag skrev är för en linkbutton. 

OnClick kanske fungerar...

Permalänk: https://www.webforum.nu/p/2070266

## #6 — Vinnaren, 2008-01-14T13:03Z

tack, men ingenting händer när jag klickar i en av RadioButton, den går inte in i rbtnPayWay_CheckedChanged (inget felmeddelande).

kan det vara för fel?   :stud

Permalänk: https://www.webforum.nu/p/2070268

## #7 — MikeEast, 2008-01-14T13:14Z

Det låter lite konstigt.

\- Har alla inblandade kontroller runat="server"?
\- Är rbtnPayWay_CheckedChanged public eller protected?
\- Har du kompilerat om?

Kan du posta din nya kod kanske..?

::m

Permalänk: https://www.webforum.nu/p/2070270

## #8 — Vinnaren, 2008-01-14T13:48Z

ok, men märkte nu när jag la in en rad till i databasen att man kan markera två RadioButton, hur löser man det så endast en kan vara markerad?

Har följande:

```
    <asp:GridView 
        DataKeyNames="PayId" 
        ID="gvPayWay" 
        runat="server" 
        AutoGenerateColumns="False" 
        AllowPaging="false" 
        CssClass="gvPayWay"  
        GridLines="None"     
        AllowSorting="false" 
        EmptyDataText="Det finns inga betalsätt att välja mellan" 
        DataSourceID="PayWayObjectDataSource">
        <Columns>
            <asp:TemplateField HeaderText="Betalsätt">
                                <ItemTemplate>
                    <asp:RadioButton 
                        ID="rbtnPayWay" 
                        GroupName="PayWay" 
                        ToolTip="Välj betalningsalternativ"  
                        Text='<%#Eval("Name") %>'                            
                        runat="server" 
                        oncheckedchanged="rbtnPayWay_CheckedChanged" />
                    <asp:label runat="server" id="lblPayId" Text='<%# Eval("PayId") %>' Visible="False" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Kostnad">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%#Eval("Price") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>    
    </asp:GridView>
    
    <asp:Button ID="btnPayWay" runat="server" Text="Vidare" />
```

samt:

```
    protected void rbtnPayWay_CheckedChanged(object sender, EventArgs e)
    {
        RadioButton rb = (RadioButton)sender;
        if (rb == null)
            return;

        // Om kontrollen du vill åt ligger i samma "cell" (samma templatefield)
        DataControlFieldCell cell = (DataControlFieldCell)rb.Parent;
        if (cell == null)
            return;

        // Om kontrollen du vill åt ligger på samma rad, men i ett annat templatefield
        // eller om du vill komma åt dataItem för raden. Det innebär dock att GridView 
        // måste vara databound (row.DataItem)
        //GridViewRow row = rb.Parent.Parent as GridViewRow;
        //if (row != null)
        //    return;

        Label lblPayId = (Label)cell.FindControl("lblPayId");
        if (lblPayId == null)
            return;

        int payId;
        Int32.TryParse(lblPayId.Text, out payId);
        
        Session["PayId"] = payId;

    }
```

Permalänk: https://www.webforum.nu/p/2070274

## #9 — Vinnaren, 2008-01-14T21:51Z

det löste sig med:

```
            foreach (GridViewRow gv in gvPayWay.Rows)
            {
                RadioButton rbtnPayWay = (RadioButton)gv.FindControl("rbtnPayWay");
                Label lblPayId = (Label)gv.FindControl("lblPayId");

                if (rbtnPayWay.Checked)
                {
                    int payid = Convert.ToInt32(lblPayId.Text);
                    Session["PayId"] = payid;
                }
            }
```

Men hur ställer man in på RadioButton att man endast ska kunna markera en? SOm jag har det nu kan man markera flera.   :q   :stud

Permalänk: https://www.webforum.nu/p/2070417

## #10 — CatZ, 2008-01-15T06:49Z

då måste alla ha samma id eller tillhöra samma grupp

Permalänk: https://www.webforum.nu/p/2070448

## #11 — Vinnaren, 2008-01-15T09:41Z

ok, har ju satt följande egenskaper:

```
ID="rbtnPayWay" 
                        GroupName="PayWay"
```

men det funkar inte   :stud   :q

Permalänk: https://www.webforum.nu/p/2070480

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/168093-problem-med-radiobutton-i-gridview
