2014-10-13 3 views
0

드롭 다운 목록에서 선택한 항목을 가져 와서 버튼을 누르고 해당 항목을 GridView에 추가하여 사용자가 볼 수있게하려고합니다. 현재 + 버튼을 누르면 격자가 표시되지만 셀은 비어 있습니다. 어떤 제안?ASP GridView에 드롭 다운 목록 항목 추가

ASP 코드 :

<tr> 
    <td valign="top" colspan="2"> 
     <b>Agents Visited</b><br /> 
     <asp:DropDownList SelectionMode="Multiple" runat="server" ID="agentsDropdown" Name="agentsDropdown" width="425"></asp:DropDownList> 
    </td> 
    <td valign="top"> 
     <br /> 
     <asp:Button id="agentButton" name="agentButton" runat="server" Text="+" OnClick="AddAgent" CssClass="buttonstyle" onmouseover="shade(this);" onmouseout="unshade(this);" /> 
    </td> 
</tr> 
<tr> 
    <asp:GridView ID="agentGridView" Visible="False" AllowSorting="False" AllowPaging="False" Runat="server" AutoGenerateColumns="False" PageSize="20" > 
<Columns> 
     <asp:TemplateField HeaderText="Agent"> 
      <ItemTemplate> 
       <asp:Label ID="agentName" runat="server" Text=''></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Value"> 
      <ItemTemplate> 
       <asp:Label ID="agentValue" runat="server" Text=''></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowDeleteButton="True" /> 
    </Columns> 
</asp:GridView> 
</tr> 

초기의 GridView 바인딩 :

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack 
     agentGridView.DataSource = Nothing 
     agentGridView.Databind() 
    End If 
End Sub 

추가 코드 뒤에이 :

Protected Sub AddAgent(sender As Object, e As EventArgs) 
    If agentsDropdown.SelectedIndex > 0 Then 
     Dim dt As New DataTable 

     dt.Columns.Add("agentName") 
     dt.Columns.Add("agentValue") 

     Dim row1 As DataRow = dt.NewRow 
     row1.Item("agentName") = agentsDropdown.SelectedItem.Text.ToString() 
     row1.Item("agentValue") = agentsDropdown.SelectedValue.ToString() 
     dt.Rows.Add(row1) 

     agentGridView.DataSource = dt 
     agentGridView.DataBind() 

     agentsDropdown.SelectedIndex = 0 

     Dim agentRowsCount as Integer = agentGridView.Rows.Count 
     If agentRowsCount > 0 
      agentGridView.Visible = True 
     End If 
    End If 
End Sub 
+0

당신이 코드를 밟았다. 여기에서 추측 할 수 있지만 여기에 올 때마다 새로운 데이터 테이블을 계속 작성하십시오. 선택을 할 때 선택된 인덱스 변경 이벤트가 발생합니까? 왜냐하면 당신의 코드에서 여기 다시 agent Dropdown.SelectedIndex = 0을 설정했기 때문입니다. 다시 그것을 해고하고 새로운 빈 테이블을 생성 할 수 있습니다. 네가 여기 두 번 들어올 지보십시오. – sjramsay

+0

저는 Visual Studio에서 현재 일하고 있지 않습니다. 따라서 코드를 단계별로 실행하는 것은 고통입니다. 그러나 SelectedIndex = 0을 주석 처리하면 아무 것도 변경되지 않습니다. – niclake

답변

1

이 지금 당신을 위해 작동합니다. GridView를 다음과 같이 변경하십시오.

<asp:GridView ID="agentGridView" Visible="False" AllowSorting="False" AllowPaging="False" Runat="server" AutoGenerateColumns="False" PageSize="20" > 
<Columns> 
     <asp:BoundField DataField="agentName" HeaderText="Agent Name" ItemStyle-Width="30" /> 
     <asp:BoundField DataField="agentValue" HeaderText="Agent Value" ItemStyle-Width="30" /> 
     <asp:CommandField ShowDeleteButton="True" /> 
    </Columns> 
</asp:GridView> 
+0

위대한 작품! 이제 여러 항목을 허용하려면 어떻게해야합니까? add를 수행 할 때마다 현재 값을 덮어 씁니다. – niclake

+0

수정안을 제시했지만 AddAgent 메서드를 사용할 때마다 새 DataTable을 작성하기 때문에 덮어 쓰는 이유가 있습니다. 이렇게하면 매번 새로운 빈 테이블이 만들어집니다. – sjramsay

1

이 방법이 효과가 있는지 확인하십시오. 나는 이것이 더 효과적이라고 생각한다. #

Public Class WebForm1 
Inherits System.Web.UI.Page 

Dim dt = Nothing 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If (Session("Agents") Is Nothing) Then 
     dt = New DataTable 
    Else 
     dt = Session("Agents") 
    End If 
    If Not Page.IsPostBack Then 
     agentGridView.DataSource = Nothing 
     agentGridView.DataBind() 
    End If 

End Sub 

Protected Sub AddAgent(sender As Object, e As EventArgs) Handles agentsDropdown.SelectedIndexChanged 
    If agentsDropdown.SelectedIndex > 0 Then 

     If (Session("Agents") Is Nothing) Then 
      dt = New DataTable() 
      dt.Columns.Add("agentName") 
      dt.Columns.Add("agentValue") 
     End If 

     Dim row1 As DataRow = dt.NewRow 
     row1.Item("agentName") = agentsDropdown.SelectedItem.Text.ToString() 
     row1.Item("agentValue") = agentsDropdown.SelectedValue.ToString() 
     dt.Rows.Add(row1) 

     Session("Agents") = dt 
     agentGridView.DataSource = dt 
     agentGridView.DataBind() 

     agentsDropdown.SelectedIndex = 0 

     Dim agentRowsCount As Integer = agentGridView.Rows.Count 
     If agentRowsCount > 0 Then 
      agentGridView.Visible = True 
     End If 
    End If 

End Sub 

End Class 
+0

빙고! 정말 고맙습니다. – niclake

+0

안녕하세요. Niclake – sjramsay

관련 문제