2012-06-24 5 views
2

gridview 내 드롭 다운 목록의 값이 변경 될 때마다 어떻게 텍스트 상자의 값을 변경할 수 있습니까?gridview에서 dropdownlist에서 선택된 값을 얻는다. asp net

페이지로드시 텍스트 상자에 선택한 값이 표시되지만 드롭 다운 목록의 선택을 변경하면 텍스트 상자 값이 변경되지 않습니다.

코드는 다음과 같습니다.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false"> 
    <Columns> 
     <asp:TemplateField HeaderText="Entry"> 
      <ItemTemplate> 
       <%# Container.DataItemIndex + 1 %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Duty"> 
      <ItemTemplate> 
       <asp:DropDownList ID="duty" runat="server" OnLoad = "ddl1_load" OnSelectedIndexChanged="duty_SelectedIndexChanged" autopostback="true" EnableViewState="true"></asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

코드 숨김은 다음과 같습니다.

protected void ddl1_load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     DataTable dt = new DataTable(); 
     Duty dy = new Duty(); 
     dt = dy.getdutyid(Convert.ToInt32(dropcontractid.SelectedValue)); 
     DropDownList ddl = (DropDownList)sender; 
     ddl.DataSource = dt; 
     ddl.DataTextField = "dutyid"; 
     ddl.DataValueField = "dutyid"; 
     ddl.DataBind(); 
     TextBox1.Text = ddl.SelectedValue; 
    } 
} 

답변

3

당신이 선택한 값을 표시 SelectedIndexChanged 핸들러를 사용해야합니다

마크 업 :

<asp:DropDownList ID="duty" runat="server" OnLoad="ddl1_load" OnSelectedIndexChanged="duty_SelectedIndexChanged"></asp:DropDownList> 

코드 숨김

protected void duty_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    GridViewRow gvr = (GridViewRow)(((Control)sender).NamingContainer); 
    DropDownList duty= (DropDownList) gvr.FindControl("duty"); 
    TextBox1.Text = duty.SelectedItem.Value; 
} 
+0

안녕하세요 감사를 말해의 onload 속성을 사용 didnt는하지만 지금은 드릴 수 없습니다 텍스트 상자에 텍스트를 표시하려면 ... – gogogo

+0

답변을 편집하고 _SelectedIndexChanged_ 내에 중단 점을 배치하고 드롭 다운 값이 어떤 값인지 확인하십시오. – Coder

+0

포스트 백 이후에만 값을 가져올 수 있으며 중단 점에서 값은 항상 첫 번째 선택 항목입니다. 두 번째 선택 영역을 선택하면 텍스트 상자로 이동하지 않습니다. – gogogo

0

당신은 조사해야한다 d를 사용하여 ata 바인딩 대신. textbox.Text를 selecteditem.value로 바인딩하면 적절한 업데이트가 수행됩니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 그러나 이것에 오히려 새로운 im, 나는 이것을 어떻게 하는가 ?? – gogogo

3

GridViewDropDownLists을 사용하여 비슷한 문제가 발생했습니다. 내 해결책은 모든 게시물에 DropDownList을 다시 쓰지 않도록 드롭 다운에 대해 onLoad을 조정하는 것이 었습니다. 이 방법으로 무언가가 있다면 다시 채울 수 없습니다.

protected void dropDownLoad(object sender, EventArgs e) 
{ 
    DropDownList dropDown = sender as DropDownList; 
    if (dropDown.SelectedValue == null || dropDown.SelectedValue == "") 
    { 
     // Your Code to populate table 
    } 
} 
0

이는 내가 같이 코드를 한 번 나에게 어떻게 ...하지만 난이 작동하는 경우, 귀하의 회신에 대한

<asp:TemplateField HeaderText="duty" SortExpression="duty"> 
             <EditItemTemplate> 
             <asp:TextBox ID="duty" runat="server" Text='<%# Bind("duty_Name") %>'></asp:TextBox> 
            </EditItemTemplate> 
             <ItemTemplate> 
              <asp:Label ID="lblduty" runat="server" Text='<%# Eval("duty_Name") %>' /> 
             <asp:DropDownList ID="ddlduty" runat="server" CssClass="dropdownlist" 
              OnLoad = "ddl1_load" OnSelectedIndexChanged="duty_SelectedIndexChanged" Visible = "false" 
              > 
             </asp:DropDownList> 
            </ItemTemplate> 


             <HeaderStyle Width="5%" /> 
             <ItemStyle HorizontalAlign="Center" /> 
            </asp:TemplateField> 
관련 문제