2013-04-19 3 views
1

У меня есть ASP.NET GridView, который я заполняю данными, одной кнопкой и одним RadioButtonList с 4 переключателями. Как я могу выбрать переключатель, нажав кнопку за пределами GridView (используя C# codebehind)? Кнопка внутри GridView должна использоваться для удаления строки (событие RowCommand, я думаю ...) Спасибо!ASP Чтение значения из RadioButtonList внутри GridView

Код внутри GridView:

<Columns> 
    <asp:BoundField DataField="name" HeaderText="Name" /> 
    <asp:BoundField DataField="value" HeaderText="Value" /> 
    <asp:TemplateField ShowHeader="false" HeaderText="Foo?"> 
     <ItemTemplate> 
      <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal"> 
       <asp:ListItem Selected="true">Item 1</asp:ListItem> 
       <asp:ListItem>Item 1</asp:ListItem> 
       <asp:ListItem>Item 2</asp:ListItem> 
       <asp:ListItem>Item 3</asp:ListItem> 
       <asp:ListItem>Item 4</asp:ListItem> 
      </asp:RadioButtonList> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField ShowHeader="false" HeaderText=""> 
     <ItemTemplate> 
      <asp:Button ID="Button1" runat="server" Text="Remove" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 
+0

Можем ли мы получить фрагменты кода из события «RowCommand» –

+0

Давайте посмотрим на код GridView (разметка и код позади) –

+0

Вам необходимо опубликовать код. – Hogan

ответ

2

Чтобы узнать, какой был выбран RadioButton следующие действия с текущего кода:

Измените кнопку на это:

<asp:TemplateField ShowHeader="false" HeaderText=""> 
    <ItemTemplate> 
     <asp:Button ID="Button1" runat="server" Text="Remove" CommandArgument="<%# ((GridViewRow) Container).RowIndex%>" 
      CommandName="remove" /> 
    </ItemTemplate> 
</asp:TemplateField> 

так что теперь у вас есть CommandName и CommandArgument объектов, заполненных. CommandArgument передаст индекс строки вашему RowCommand Событие.

Тогда ваш RowCommand событие выглядит следующим образом:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "remove") 
    { 
     int index = Convert.ToInt32(e.CommandArgument); 
     if (index >= 0) 
     { 
      //index is the row, now obtain the RadioButtonList1 in this row 
      RadioButtonList rbl = (RadioButtonList)GridView1.Rows[index].FindControl("RadioButtonList1"); 
      if (rbl != null) 
      { 
       string selected = rbl.SelectedItem.Text; 
       Response.Write("Row " + index + " was selected, radio button " + selected); 
      } 
     } 
    } 
} 

Примечание: Я бы рекомендовал добавить Value к вашему RadioButtons, так что вы проверяете против значений, а не текст.

+1

Wow! Я проверю это. Я не уверен, понимаю ли я, как это работает ... CommandArgument = "<% # ((GridViewRow) Container) .RowIndex%>". Я посмотрю на это :) –

+1

Да, добавление Value в RadioButtons - хорошая идея :) –

+0

@Half_Baked, как это работает, каждый раз, когда вы нажимаете кнопку «Удалить», кнопки будут вызывать сообщение, а Событие RowCommand будет запущено. С помощью CommandArgument вы можете передать любое значение в RowCommandEvent. С этим значением я знаю, какая строка выбрана, и с этим я могу легко найти RadioButtonList. –

Смежные вопросы