Sheila Pontes
Привет,
Чтобы устранить проблему, вы должны назначить событие onCheckedChanged каждому элементу.
Когда вы нажимаете на опцию, событие срабатывает, и вы можете манипулировать объектом, который вы щелкнули.
Я подал вам пример. Вы можете скопировать код, вставить его в свой проект и протестировать. Код комментируется, чтобы помочь вам.
<asp:DataList ID="lstView" runat="server" RepeatDirection="Horizontal" RepeatLayout="Table" OnItemCreated="lstView_ItemCreated" >
<ItemTemplate>
<div >
<asp:RadioButton id="rdo" runat="server" AutoPostBack="True" Text='<%#DataBinder.Eval(Container.DataItem, "name")%>' />
<asp:Label ID="lbl" runat="server" CssClass="lblcust" Text='<%#DataBinder.Eval(Container.DataItem, "id")%>' ></asp:Label>
</div>
</ItemTemplate>
</asp:DataList>
<asp:Label ID="lblId" style="color:red; font-weight:bold; font-size:14px;" runat="server" Text=""></asp:Label>
Ваш код-позади. полный код.
public partial class frmMyTests : System.Web.UI.Page
{
// Data to load the list
private DataTable create_dada_source()
{
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("name", typeof(string));
DataRow dr;
for(int i = 0; i < 9; i++)
{
dr = dt.NewRow();
dr["id"] = "Id: " + i.ToString();
dr["name"] = "option: " + i.ToString().PadLeft(2, '0');
dt.Rows.Add(dr);
}
return dt;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Load the datalist
this.lstView.DataSource = this.create_dada_source();
this.DataBind();
}
}
protected void rdo_CheckedChanged(object sender, EventArgs e)
{
RadioButton rbl = null;
//Read all items from the datalist
foreach(DataListItem lstitem in this.lstView.Items)
{
rbl = (RadioButton)lstitem.FindControl("rdo");
//Compare if the item is the same as I clicked
if (rbl.Text != ((RadioButton)sender).Text)
{
//False attribute for all items, exception that I clicked
rbl.Checked = false;
}
else
{
//read the label with my id
this.lblId.Text = ((Label)lstitem.FindControl("lbl")).Text;
}
}
}
//Assigns the event to radiobutton
protected void lstView_ItemCreated(object sender, DataListItemEventArgs e)
{
//find only the item, ignore the header
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//Assigns the event to each radiobutton item
((RadioButton)e.Item.FindControl("rdo")).CheckedChanged += new System.EventHandler(rdo_CheckedChanged);
}
}
}