2014-10-13 2 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> 

Initial 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

Вы прошли через свой код. Просто догадайтесь здесь, но вы постоянно создаете новый тип данных каждый раз, когда приходите сюда. Итак, у вас есть выбранный индекс с измененным событием, когда вы делаете свой выбор? потому что в вашем коде здесь вы снова устанавливаете agentDropdown.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

Это отлично работает! Теперь, как я могу получить несколько записей? Каждый раз, когда я делаю добавление, он перезаписывает текущее значение. – niclake

+0

Я поставил исправление, но причина, по которой вы переписываете, - это то, что вы создаете новый DataTable каждый раз, когда вы приходите в ваш метод AddAgent. Это создаст новую пустую таблицу каждый раз. – sjramsay

1

Посмотрите, будет ли это работать для вас. Я больше C# однако это выглядело так, как будто это сработало:

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

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