shaprpuff Ответов: 3

Как выбрать один вариант из ASP: datalist?


Нужно выбрать в ASP:RadioButton с таблицы в веб-таможенного контроля.

&ГТ;переключатель выбрать все никак не выбрать одну.

-у меня нет идеи, как это сделать.

заранее спасибо.

Что я уже пробовал:

<pre><asp:DataList ID="lstView" runat="server"  RepeatDirection="Horizontal" RepeatLayout="Table" onselectedindexchanged="lstView_SelectedIndexChanged"  >
                     
       <ItemTemplate>
<div >
<asp:ImageButton ID="btnimage"      ImageUrl="../images/ActivePc.png"   runat="server"  CommandName="click"    /> 

<asp:RadioButtonList   id="rdo"  runat="server" DataTextField='<%#Eval("name")%>'  />

<asp:Label ID="lbl" runat="server" Text='<%#Eval("name")%>' CssClass="lblcust" ></asp:Label>
                        
         
           </div>

             </ItemTemplate>
                      
               </asp:DataList>






		    
                    

3 Ответов

Рейтинг:
2

Sheila Pontes

Привет,

Попробуйте изменить компонент RadioButtonList для RadioButton.

В коде C# для захвата Радиобуттона используйте приведенный ниже код.

protected void lstView_SelectedIndexChanged(object sender, EventArgs e)
{
            RadioButton rbl = (RadioButton)this.lstView.Items[this.lstView.SelectedIndex].FindControl("rdo");
}


Рейтинг:
2

F-ES Sitecore

Изменения в radiobuttonlist с радиокнопкой

<asp:RadioButton id="rdo"  runat="server" Text='<%#Eval("name")%>' />


Затем в вашем коде установите значение rdo для любого поля, которое вы хотите. Вот я и делаю первый

RadioButton rdo = (RadioButton) lstView.Items[0].FindControl("rdo");
rdo.Checked = true;


shaprpuff

я попробовал это сделать, но все равно все радиоприемники продолжают выбирать, мне нужно выбрать один за раз, а также защищенный void lstView_SelectedIndexChanged(Object sender, EventArgs e)
{} не стреляет на моей странице.

F-ES Sitecore

МММ, похоже, элементы управления RadioButton не работают в повторяющихся контейнерах, таких как DataList, возможно, вам придется использовать обычную разметку переключателей html

&ЛТ;входной тип="радио" имя="MyRadio" значение=в'<%#Ивала("название")%&ГТ;' /&ГТ; &ЛТ;%#Ивала("название")%&ГТ;

Вы получите выбранное значение через запрос.Форма ["MyRadio"]

Чтобы запустить индекс, даже имя команды ImageButton должно быть "select", а не"click".

Рейтинг:
2

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);

            }
        }
    }