2009-07-22 2 views
2

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

Спасибо, SUMIT

ответ

1

Похоже, классический мастер/шаблон подробно смотрите здесь:

Tutorial 10: Master/Detail Using a Selectable Master GridView with a Details DetailView

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

Select a row in an asp:GridView without using a Select Command

2

Sumit, Не используйте контроль HTML, используйте элемент управления жерех:

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

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

+1

+1 за учебник, который решает проблему с переключателем вопроса. Однако я не уверен, что вы имеете в виду в первой части вашего ответа. Советуем использовать элемент управления переключателем html недействительно (согласно учебнику), а ваш примерный код имеет элемент управления ASP, а не элемент управления HTML. –

+0

спасибо, Джейсон. Я перевернул формулировку по ошибке. Я отредактировал свой комментарий, чтобы понять, что я имел в виду. –

0

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


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

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