Нужна помощь в радиокнопке в gridview

Через переключатель я выбираю данные из gridview. Здесь все радиокнопки выбираются одновременно. На самом деле этого не должно происходить, когда пользователь может выбрать только одну кнопку, чего я не мог сделать. Моя вторая проблема заключается в том, что когда я выбираю конкретную радиокнопку, подробности должны отображаться в текстовом поле. У меня есть поле Itemid, ItemName, Quantity, Rate и Total в представлении сетки. Эти значения я вставил через текстовое поле, поэтому у меня есть все соответствующие текстовые поля для всех. Поэтому, как только я выберу конкретную радиокнопку, эти детали должны отображаться в соответствующем текстовом поле. Я выполнил для этого кодировку вставки, но не смог выбрать радиокнопку и отобразить ее в текстовом поле. Пожалуйста, помогите мне в кодировании для этой проблемы.

Спасибо, сумит


person Community    schedule 22.07.2009    source источник


Ответы (3)


Sumit, не используйте элемент управления html, используйте элемент управления asp:

<asp:RadioButton ID="RadioSelector" runat="server" GroupName="RadioSelectors" />

У меня была аналогичная проблема в классе ASP.NET, и я следовал этот учебник, который отлично сработал.

person Jim Schubert    schedule 21.10.2009
comment
+1 за учебник, который решает проблему с переключателем из вопроса. Однако я не уверен, что вы имеете в виду в первой части вашего ответа. Ваш совет использовать элемент управления переключателя html недействителен (согласно руководству), и ваш пример кода относится к элементу управления ASP, а не к элементу управления HTML. - person Jason Berkan; 22.10.2009
comment
спасибо, Джейсон. Я перепутал формулировку по ошибке. Я отредактировал свой комментарий, чтобы отразить то, что я имел в виду. - person Jim Schubert; 22.10.2009

Звучит как классический шаблон master/detail, см. здесь:

Урок 10. Использование Master/Detail с помощью выбираемого Master GridView с DetailView DetailView

Вы боретесь с предполагаемой работой элементов управления привязкой данных ASP.NET, используя переключатели. Мне не нравятся избранные ссылки, либо они не совсем Web 2.0! но их можно довольно легко заменить щелчком строки, выполнив это (или вариант того же):

Выберите строку в asp:GridView без использования команды Select< /а>

person hollystyles    schedule 22.07.2009

Я прочитал несколько статей в сети, но ни одна не подошла. Наконец-то я нашел свое собственное решение, не используя радиокнопку HTMLControls и не используя Javascript. Это работает для моего требования.


Мои HTML-настройки Gridview были следующими

    <asp:GridView ID="grdVersion" runat="server" 
        AutoGenerateColumns="false" AllowPaging="true"
        AutoGenerateEditButton="false" PageSize="10" Width="400px" 
        EmptyDataText="No records available."
        OnRowDataBound="grdVersion_RowDataBound"
        AutoGenerateSelectButton="false">
        <Columns>
            <asp:BoundField DataField="versionid" HeaderText="Version No." ItemStyle-Width="50px"
                ItemStyle-Wrap="false" HtmlEncode="true" ReadOnly="true" />
            <asp:BoundField DataField="version_date" HeaderText="Version Date" ItemStyle-Width="100px"
                ItemStyle-Wrap="false" HtmlEncode="true" ReadOnly="true" />
            <asp:BoundField DataField="remarks" HeaderText="Remarks" ItemStyle-Width="150px"
                ItemStyle-Wrap="true" HtmlEncode="true" ReadOnly="true" />

            **<asp:TemplateField HeaderText="Admin" HeaderStyle-Width="100px">
                <ItemTemplate>
                    <asp:RadioButton ID="rdCurrent" runat="server" 
                    Checked="false" Enabled="true" GroupName="rgVersion" 
                    AutoPostBack="true" 
                    OnCheckedChanged="rdCurrent_CheckChanged" />
                </ItemTemplate>**

             </asp:TemplateField>
        </Columns>
    </asp:GridView>

Код сервера (C#) был следующим:

   DataTable dtDataSpaceVersions; //place this inside the codebehind page class
   protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            dtDataSpaceVersions = ListDataSpaceVersions();
            ViewState["dtDataSpaceVersions"] = dtDataSpaceVersions;

            PopulateGridVersion();
        }
    }

    protected void PopulateGridVersion()
    {
        grdVersion.DataSource = dtDataSpaceVersions;
        grdVersion.DataBind();
    }



    protected void rdCurrent_CheckChanged(object sender, EventArgs e)
    {

        Control selectedVersion = ((Control)sender).Parent;

        if (ViewState["dtDataSpaceVersions"] != null)
            dtDataSpaceVersions = (DataTable)ViewState["dtDataSpaceVersions"];

        foreach (DataRow dtr in dtDataSpaceVersions.Rows)
        {
            if (dtr["versionid"].ToString() == ((System.Web.UI.WebControls.GridViewRow)selectedVersion.Parent).Cells[0].Text)
                dtr[3] = "Y";
            else
                dtr[3] = "N";
        }
        PopulateGridVersion();
    }


    protected void grdVersion_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        DataRowView drv;
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
        {
            drv = (DataRowView)e.Row.DataItem;
            if ((RadioButton)(e.Row.FindControl("rdCurrent")) != null)
                if (drv.Row.ItemArray[3].ToString() == YesNo.N.ToString())
                    ((RadioButton)(e.Row.FindControl("rdCurrent"))).Checked = false;
                else
                    ((RadioButton)(e.Row.FindControl("rdCurrent"))).Checked = true;

            //setGridUserPermissionCheckBoxState(e.Row, drv);
        }
    }


   public DataTable ListDataSpaceVersions()
    {
        string sql = string.Empty;
        DataTable dt = new DataTable();
        dt.Columns.Add("versionid", typeof(String));
        dt.Columns.Add("version_date", typeof(String));
        dt.Columns.Add("remarks", typeof(String));
        dt.Columns.Add("is_current", typeof(String));

        DataRow dtr;
        dtr = dt.NewRow();
        dtr[0] = "1.1";
        dtr[1] = "12-Dec-2005";
        dtr[2] = "Campaign Information";
        dtr[3] = "N";
        dt.Rows.Add(dtr);

        dtr = dt.NewRow();
        dtr[0] = "1.2";
        dtr[1] = "06-Mar-2006";
        dtr[2] = "Sales corrections";
        dtr[3] = "N";
        dt.Rows.Add(dtr);

        dtr = dt.NewRow();
        dtr[0] = "1.3";
        dtr[1] = "24-Aug-2009";
        dtr[2] = "Invoice reconciliation";
        dtr[3] = "Y";
        dt.Rows.Add(dtr);

        dtr = dt.NewRow();
        dtr[0] = "1.4";
        dtr[1] = "30-May-2010";
        dtr[2] = "Invoices verification";
        dtr[3] = "N";
        //dtr[0][0] = "";

        dt.Rows.Add(dtr);
        return dt;
    }
person Community    schedule 28.05.2010