2009-06-01 8 views
0

Ich habe eine Gridview mit einer Dropdown-Liste, die programmatisch erstellt wurde. Ich möchte
Zugriff auf den ausgewählten Wert und auf die ID dieser Zeile haben. Ich habe die Dropdown-Liste erstellt in Gridview_RowDataBound und ich kann den Text in der Zelle verwenden, aber meine addHandler wird nie ausgelöst. Wo gebe ich den Add-Handler an. Ich glaube, ich kann es den Addhandler in RowCreated zuweisen, aber wie wäre ich in der Lage, den Add-Handler einzurichten, wenn die Schaltfläche in RowDataBound erstellt wird?Dropdown-Liste und Gridview Zeilenindex/selectedvalue Problem

Dim deptvalue As String 
    Dim i As Integer = 0 

    Dim ddlmgr As New DropDownList 
    ddlmgr.AutoPostBack = True 
    AddHandler ddlmgr.SelectedIndexChanged, AddressOf ddlmgr_SelectedIndexChanged 
    ddlmgr.Items.Clear() 
    ddlmgr.Items.Insert(0, "--Select a Manager--") 
    ddlmgr.AppendDataBoundItems = True 
    ddlmgr.DataTextField = "Name" 
    ddlmgr.DataValueField = "number" 
    ddlmgr.DataSource = SqlDataSource2 
    ddlmgr.DataBind() 

    deptvalue = e.Row.Cells(0).Text 
    ddlmgr.Attributes.Add("onchange", "setDepart('" & deptvalue & "')") 

    If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <> DataControlRowType.Header And e.Row.RowType <> DataControlRowType.Footer Then 
     e.Row.Cells(2).Controls.Add(ddlmgr) 
    End If 

    If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <> DataControlRowType.Footer Then 
     e.Row.Cells(0).Style.Add("display", "none") 
    End If 

Es passt am besten in rowData gebunden, weil meine Dropdownlist-Elemente nicht kopieren, aber ich muss in der Lage sein, die AddHandler Ich habe zu verwenden.

Antwort

1

Anstatt das Dropdown dynamisch zu erstellen, habe ich das Steuerelement zur Gridview hinzugefügt. Dadurch hatte ich Zugriff auf den ausgewählten Wert. Dann setze ich den Wert des versteckten Wertes, indem ich ein Onchange-Attribut zur Dropdown-Liste hinzufüge, das den versteckten Wert auf den Text in meinem versteckten Feld setzt. Das Folgende ist in Gridview_RowDatabound:

For i As Integer = 0 To GridView1.Rows.Count - 1 

     Dim ddl As DropDownList = GridView1.Rows(i).FindControl("ddlmgr") 
     Dim deptvalue As String = GridView1.Rows(i).Cells(0).Text 

     ddl.Attributes.Add("onchange", "setDepart('" & deptvalue & "')") 
    Next 
0

Anstatt den Zellentext zu verwenden, verwenden Sie einfach e.item.DataItem aus rowDatabound, um den tatsächlichen Wert zu erhalten?

+0

der Text funktioniert gut ... ich könnte das aber tun. aber das ist nicht mein Problem. – Eric

+0

Ich denke, der Grund, warum Sie es nicht in RowDatabound tun können, ist, weil der Text noch nicht existiert - e.Row.Cells (0) .Text wird leer sein, was dazu führen wird, dass Ihr Change-Event fehlschlägt. Wenn Sie den Wert von dataItem in rowDatabound festlegen, sollte es funktionieren. – Rob

+0

Ich denke du schaust meine Frage rückwärts an. In rowDatabound habe ich Zugriff auf das Datenelement und den Text. Ich kann die rowID dorthin bringen, aber ich kann den addhandler nicht auslösen, so dass ich meinen ausgewählten Wert abrufen kann. Ich werde die Frage neu formulieren. – Eric