2014-04-30 6 views
0

약간의 배경. 마스터 페이지도 있습니다. 여기 영문ASP VB.NET - FindControl이 내 컨트롤을 찾지 못했습니다.

<asp:WizardStep ID="WizardStepOrder" runat="server" StepType="Step"> 
<div> 
<p> 
Please review the items below and enter the quantity of each item for which you are requesting credit. 
</p> 
<asp:Label ID="InvoiceItemsInstructionsLabel" runat="server" /> 
</div> 
<div style="padding: 0;"> 
<asp:GridView ID="InvoiceItemsGridView" runat="server" BorderStyle="None" AutoGenerateColumns="False" Width="100%"> 
<Columns> 
<asp:BoundField DataField="Make" HeaderText="Make" /> 
<asp:BoundField DataField="PartNumber" HeaderText="Part Number" /> 
<asp:BoundField DataField="Description" HeaderText="Description" /> 
<asp:BoundField DataField="Ordered" HeaderText="Ordered" /> 
<asp:BoundField DataField="Shipped" HeaderText="Shipped" /> 
<asp:TemplateField HeaderText="Credit Code"> 
<ItemTemplate> 
<asp:DropDownList ID="ddlCreditCode" runat="server" AutoPostBack="true"> 
<asp:ListItem Text="--Select Value--" Value=""></asp:ListItem> 
</asp:DropDownList> 
</ItemTemplate> 
</asp:TemplateField> 

또한 코드 코드 뒤에 내 비주얼 베이직

Dim ddlCreditCode As DropDownList = DirectCast(Me.WizardStepOrder.FindControl("ddlCreditCode"), DropDownList) 
Dim sql As String 
Dim cnn As SqlConnection 
Dim cmd As SqlCommand 
sql = String.Format("select CreditCode, CreditCodeDescription from myDatabase..CreditCodes") 
cnn = DBConnection.GetNamedConnection(NamedConnection.myDatabase) 
cmd = New SqlCommand(sql, cnn) 
Try 
cnn.Open() 
ddlCreditCode.DataSource = cmd.ExecuteReader() 
ddlCreditCode.DataTextField = "CreditCodeDescription" 
ddlCreditCode.DataValueField = "CreditCode" 
ddlCreditCode.DataBind() 
Catch ex As Exception 
Throw ex 
Finally 
cnn.Close() 
cnn.Dispose() 
End Try 

ddlCreditCode 아무것도로 돌아오고에게 있습니다. 왜? 내 ASP 페이지에서 데이터베이스의 값으로 드롭 다운 목록을 채우려고합니다. 하지만 그렇게하려면 그 통제를 찾을 수 있어야합니다. 나는 masterpage가 있기 때문에 contentplaceholder를 사용하고 findcontrol을 사용하고 그 placeholder에 findcontrol을 사용해야하는 문제에 대해 읽었지만 그 중 하나는 작동하지 않습니다. 나는 그것이 itemtemplate 또는 gridview와 관련이 있다고 생각하고있다. gridview 같은 것을 반복해야합니까?

+1

는'GridViewRow'을 row''귀하의 GridView 내에서 컨트롤을 채울 RowDataBound 이벤트를 사용할 필요가? 그렇다면 어떻게 얻나요? 또한 코드는 어디에 위치해 있습니까? –

+0

예 행은 gridviewrow입니다. 죄송합니다. 위의 foreach 문을 포함하는 것을 잊어 버렸습니다. itemtemplate 안에 있기 때문에 id 속성을 찾을 수없는 이유는 무엇입니까? – user3542850

답변

0

당신은 themeself :

가 같은 답을 표시 작업하는 경우 또한 내가 개인적으로 참조를 파괴하는 돌봐로 문을 사용하여 사용 O를 사용을 초대이

Try 
//prevent issue on connection already open for some reason 
if cnn.state=Closed then cnn.open 
//declare a sqldataadpter 
dim da as SqlDataAdapter(cmd) 
//declare Dataset 
dim ds as new Dataset 
//fill dataset 
da.Fill(ds) 
ddlCreditCode.DataSource =ds.table(0) 
ddlCreditCode.DataTextField = "CreditCodeDescription" 
ddlCreditCode.DataValueField = "CreditCode" 
ddlCreditCode.DataBind() 
Catch ex As Exception 
Throw ex 
Finally 
cnn.Close() 
cnn.Dispose() 

처럼 it.Change에게 코드를 해달라고 대답

+0

문제는 findcontrol이 내 드롭 다운 목록을 찾지 못하는 것입니다. 그게 내가 겪고있는 주요 문제 야. – user3542850

0

ddlCreditCode이 (가) 닫기 태그가 지정되어 있지 않습니다. WizardStepOrder의 어린이 또는 형제 인 경우 내 코드에서 알 수 없습니다. 직접 아동이 아닌 경우 Me.WizardStepOrder.FindControl()은 찾지 못할 것입니다. Per MSDN :

이 메서드는 컨트롤이 지정된 컨테이너에 직접 포함되어있는 경우에만 컨트롤을 찾습니다. 즉,이 메서드는 컨트롤 내의 컨트롤 계층을 검색하지 않습니다.

0

당신은

Protected Sub OnRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 

    If (e.Row.RowType = DataControlRowType.DataRow) Then 

    'Find the DropDownList in the Row 
    Dim ddlCreditCode As DropDownList = CType(e.Row.FindControl("ddlCreditCode"), DropDownList) 
    ddlCreditCode.DataSource =ds.table(0) 
    ddlCreditCode.DataTextField = "CreditCodeDescription" 
    ddlCreditCode.DataValueField = "CreditCode" 
    ddlCreditCode.DataBind() 


    End If 
End Sub 
관련 문제