2013-06-19 6 views
1

Я создал GridView, который заполнен из OracleReader. Данные содержат имя и фамилию человека. Эта часть работает нормально.DropDownList в автогенерированных строках GridView

Я хотел бы добавить DropDownList в качестве третьего столбца, который будет иметь источник данных из отдельного запроса. Проблема, с которой я сталкиваюсь, - это доступ к DropDownList в коде. Кроме того, как я могу получить доступ к каждому отдельному динамически создаваемому DropDown?

<asp:GridView ID="GridView_People" runat="server" emptydatatext="Make selections above"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:DropDownList ID="DropDown_features" runat="server"> 
          </asp:DropDownList> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
       </asp:GridView> 

А код, за которым заполнит GridView на кнопку мыши (это все работает отлично в настоящее время)

Protected Sub Button_Submit_Click(sender As Object, e As System.EventArgs) Handles Button_Submit.Click 
    Dim Conn As OracleConnection 
    Dim Cmd As OracleCommand 
    Dim Reader As OracleDataReader 

    Conn = New OracleConnection(--CONNECTIONSTRING--) 

    Dim sqlString As String = "select first, last from TABLE" 
    Cmd = New OracleCommand(sqlString) 

    Cmd.Connection = Conn 
    Cmd.CommandType = Data.CommandType.Text 
    Try 
     Conn.Open() 

     Reader = Cmd.ExecuteReader() 

     GridView_People.DataSource = Reader 

     GridView_People.DataBind() 
    Catch ex As Exception 
    Finally 

    End Try 
    Conn.Close() 
    Conn.Dispose() 
End Sub 

Я попытался доступа DropDown_features в случае GridView_RowCreated в коде позади, но я не являюсь доступ к выпадающему меню. Есть идеи?

ответ

2

Событие GridView RowDataBound - это то, где вы хотите получить доступ к отдельным элементам в строке, поскольку они привязаны к сетке.

protected void GridView_People_RowDataBound(object sender, GridViewRowEventArgs e) 
{    
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // Find the particular drop down list for this row 
     DropDownList ddl = (DropDownList)e.Row.FindControl("DropDown_features"); 

     // Go get data and do whatever you need to do to the drop down list 
    } 
} 

Примечание: Вам нужно будет добавить атрибут для события RowDataBound в разметке для GridView, например:

onrowdatabound="GridView_People_RowDataBound" 
+0

+1 за хороший ответ. В VB.Net он мог бы использовать Handles GridView_People.RowDataBound вместо того, чтобы подключить метод в .Aspx/.Ascx Markup. – N0Alias

+0

Спасибо! Это сработало для меня. Я использовал Handles GridView_People.RowDataBound. –

+0

Как быстро отслеживать, как мне создать и использовать событие на основе выбора ddl? –

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