将结果添加到数据集中,而不删除以前的行

本文关键字:删除 添加 结果 数据 集中 数据集 | 更新日期: 2023-09-27 18:03:15

我有一个具有这种结构的Panel

<asp:Panel ID="Custom" Visible="false" runat="server">
    Search: 
<asp:TextBox ID="TextBox1" AutoPostBack="true" runat="server">
</asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:ListBox ID="ListBox1"  Visible="true" runat="server" DataSourceID="UserSearchSource" SelectionMode="Multiple" DataTextField="username" DataValueField="username"></asp:ListBox>
<asp:SqlDataSource ID="UserSearchSource" runat="server" ConnectionString="<%$ ConnectionStrings:fscauth %>" SelectCommand="SELECT [user] FROM [table] WHERE ([user] LIKE '%' + @username + '%') ORDER BY [username]">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="user" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<br /> <br /> <asp:Button ID="Button2" CausesValidation="false" runat="server" Text="Add" OnClick="Button2_Click" />
</asp:Panel>

因此,我有一个TextBox,它在数据库中扮演用户搜索者的角色,结果显示在ListBox上。在添加Button_Click时,它将结果填充到DataTable中,然后将其用作Gridview数据源。我想实现的是,每次单击Add按钮时,不仅会将结果添加到DataTable中,而且不会删除以前的结果列表。目前我一直在使用的是:

protected void Button2_Click(object sender, EventArgs e)
{
      List<string> lista = getUserList(ListBox1);
      DataTable dt = new DataTable(); 
      DataRow dr = null;
      dt.Columns.Add(new DataColumn("user", typeof(string)));
      for (int i = 0; i < lista.Count;i++ )
      {
          dr = dt.NewRow();
          dr["user"] = lista[i].ToString();
          dt.Rows.Add(dr);
      }
      ViewState["CurrentTable"] = dt;    
      GridView1.Visible = true; 
      GridView1.DataSource = dt;
      GridView1.DataBind();
      Button3.Visible = true;
      Button1.Visible = true;
      MessagePanel.Visible = true;
}

以及CCD_ 8函数,其为:

protected List<string> getUserList(ListBox lb)
{
     List<string> li = new List<string>(); 
     // List<string> lista = (List<string>)Session["list"];
     foreach (ListItem l in lb.Items)
     {
          if (l.Selected)
          {
               li.Add(l.Text);
          }
     }
     Session["list"] = li;
     List<string> lista = (List<string>)Session["list"];
     return lista;               
}

我不太确定我想要的是否能实现,但如果有人能在这方面帮助我,那就太好了!

将结果添加到数据集中,而不删除以前的行

您需要更改这一行

 DataTable dt = new DataTable(); 

与其创建新表,不如获得现有的表

 DataTable dt = GridView1.DataSource as DataTable;

意味着获取您已经分配的gridview的数据源,并在其中添加行,而不是每次都创建新表