2013-08-27 2 views
1

Привет, у меня есть Gridview с 4 переключателями, и я хочу получить от них значение, и независимо от того, что я делаю, значение всегда ложно, может кто-то сказать, где это моя ошибка?Не могу получить значение от переключателя на gridview на C#

Это код GridView:

<asp:GridView ID="GridView8" runat="server" Width="903px" 
     Height="516px" CellPadding="4" ForeColor="#333333" GridLines="None" 
     Visible="False" 
     > 
        <AlternatingRowStyle BorderColor="Black" BackColor="White" /> 

    <Columns> 
         <asp:TemplateField HeaderText="Solicitante/"> 
          <ItemTemplate> 
           <asp:RadioButton ID="optCl1" runat="server" Text="SI" GroupName="optCl" /> 
           <asp:RadioButton ID="optCl2" runat="server" Text="NO" GroupName="optCl" /> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="CoGarante"> 
          <ItemTemplate > 
          <asp:RadioButton ID="optGar1" runat="server" Text="SI" GroupName="optGar" /> 
           <asp:RadioButton ID="optGar2" runat="server" Text="NO" GroupName="optGar" /> 

          </ItemTemplate> 
         </asp:TemplateField> 
        </Columns> 

        <EditRowStyle BorderColor="Black" /> 
        <FooterStyle BackColor="#990000" BorderColor="Black" ForeColor="White" 
         Font-Bold="True" /> 
        <HeaderStyle BackColor="#990000" BorderColor="Black" Font-Bold="True" 
         ForeColor="White" /> 
        <PagerStyle ForeColor="#333333" HorizontalAlign="Center" BackColor="#FFCC66" /> 
        <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> 
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> 
        <SortedAscendingCellStyle BackColor="#FDF5AC" /> 
        <SortedAscendingHeaderStyle BackColor="#4D0000" /> 
        <SortedDescendingCellStyle BackColor="#FCF6C0" /> 
        <SortedDescendingHeaderStyle BackColor="#820000" /> 

    </asp:GridView> 

Код функции, читать радиокнопку

protected void saveQuestions() 
{  
    foreach (GridViewRow row in GridView8.Rows) 
    { 
     RadioButton rb = row.Cells[2].FindControl("optGar2") as RadioButton; 
     Response.Write(rb.Checked); 
    } 

    conn.Close(); 
} 

код функции, которые устанавливают данные по GridView:

protected void loadQuestions() 
{ 
    OdbcConnection conn = connection(); 
    conn.Open(); 

    OdbcCommand findSql = new OdbcCommand("SELECT question AS PREGUNTAS,id FROM questionary_reg WHERE(status='1')", conn); 
    GridView8.DataSource = null; 

    DataTable dt = new DataTable(); 
    dt.Load(findSql.ExecuteReader()); 

    GridView8.DataSource = dt; 
    GridView8.DataBind(); 


    conn.Close(); 

} 

ответ

0

Изменить это:

RadioButton rb = row.Cells[2].FindControl("optGar2") as RadioButton; 

Для этого:

RadioButton rb = row.FindControl("optGar2") as RadioButton; 
+0

Это не работает. – hidura

3

Проблема, потому что произойдет обратной передачи и сброса значений внутри GridView, убедитесь, что вы вызов этой функции loadQuestions() на если Postback ТОЛЬКО

if(!IsPostBack){ 
    loadQuestions(); 
} 

#! ОБНОВЛЕНИЕ 1 РАБОЧИЙ КОД:
// Дизайн

<asp:GridView runat="server" ID="gv"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:RadioButton runat="server" ID="rd" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
<asp:Button runat="server" ID="btn" onclick="btn_Click" /> 

// Код

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnStringDb1"].ToString())) 
     { 
      try 
      { 
       String cmdText = "SELECT * FROM Image WHERE [email protected]"; 
       SqlCommand cmd = new SqlCommand(cmdText, cn); 
       cmd.Parameters.AddWithValue("@IsDeleted", "false"); 
       cn.Open(); 
       SqlDataAdapter myAdapter = new SqlDataAdapter(cmd); 
       DataTable dt_Category = new DataTable(); 
       myAdapter.Fill(dt_Category); 
       cn.Close(); 

       gv.DataSource = dt_Category; 
       gv.DataBind(); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
    } 
} 
protected void btn_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvr in gv.Rows) 
    { 
     RadioButton rd = (RadioButton)gvr.FindControl("rd"); 
     if (rd.Checked) 
     { 
     } 
     else 
     { 
     } 
    } 
} 
+0

Да, я сделал это. – hidura

+0

и это сработало? –

+0

Нет, это одна из причин того, что я сделал все, что нашел в Интернете, и все, что знаю. – hidura

0
for (int i = 0; i < GridView8.Rows.Count; i++) 
     { 
      if (GridView8.Rows[i].RowType == DataControlRowType.DataRow) 
      { 
       RadioButton rb= (RadioButton)grdView.Rows[i].FindControl("optGar2"); 
       Response.Write(rb.Checked);     
      } 
     } 
-1
foreach (GridViewRow gvp in gridView1.Rows) 
    { 
     System.Web.UI.HtmlControls.HtmlInputRadioButton rd = (System.Web.UI.HtmlControls.HtmlInputRadioButton)gvp.FindControl("rd"); 
     if (rd.Checked) 
     { 
      string s = rd.Value; 
     } 
     else 
     { 
     } 
    } 

вид конструкции

<ItemTemplate> <input runat="server" id='rd' type="radio" value='<%# Eval("id") %>' onclick="javascript:SelectSingleRadiobutton(this.id)" /> </ItemTemplate>

1

Может быть, вам нужен 'CheckedChanged' событие: (протестировано и работает)

В ASPX множества (в данном примере вы можете увидеть этикетку отображать номер строки выбранного)

    <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:RadioButton ID="rbtnSelect" AutoPostBack="true" runat="server" OnCheckedChanged="rbtnSelect_CheckedChanged" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 

и кодовую опережать набор

 protected void rbtnSelect_CheckedChanged(object sender, EventArgs e) 
    { 
     RadioButton selectButton = (RadioButton)sender; 
     GridViewRow row = (GridViewRow)selectButton.Parent.Parent; 
     int a = row.RowIndex; 
     foreach (GridViewRow rw in gvCursos.Rows) 
     { 
      if (selectButton.Checked) 
      { 

       if (rw.RowIndex != a) 
       { 
        lbResultado.Text = rw.RowIndex.ToString(); 
        RadioButton rd = rw.FindControl("rbtnSelect") as RadioButton; 
        rd.Checked = false; 
       } 
      } 
     } 
    } 
Смежные вопросы