VinnarenMedlem sedan sep. 2005833 inlägg 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
CatZMedlem sedan jan. 20022 440 inlägg 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;
}
VinnarenMedlem sedan sep. 2005833 inlägg 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
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
CatZMedlem sedan jan. 20022 440 inlägg 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...
VinnarenMedlem sedan sep. 2005833 inlägg 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
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
VinnarenMedlem sedan sep. 2005833 inlägg 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;
}
VinnarenMedlem sedan sep. 2005833 inlägg 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
CatZMedlem sedan jan. 20022 440 inlägg då måste alla ha samma id eller tillhöra samma grupp
VinnarenMedlem sedan sep. 2005833 inlägg ok, har ju satt följande egenskaper:
ID="rbtnPayWay"
GroupName="PayWay"
men det funkar inte :stud :q