如何在排序后在给定位置的bindingsource中添加一行? C#

如何在排序后在给定位置的bindingsource中添加一行? C#,第1张

概述我使用绑定源构建我的数据网格: SqlDataAdapter adapter = new SqlDataAdapter(Datenbank.cmd); dataSet1.Tables.Clear(); adapter.Fill(dataSet1, "Table"); bs = new BindingSource(); bs.DataSource = dataSet1 我使用绑定源构建我的数据网格:

sqlDataAdapter adapter = new sqlDataAdapter(Datenbank.cmd);    dataSet1.tables.Clear();    adapter.Fill(dataSet1,"table");    bs = new BindingSource();    bs.DataSource = dataSet1.tables["table"];    dataGrIDVIEw1.DataSource = bs;

现在我对它进行排序

bs.sort = "customer DESC";

现在我想在0处添加新行

dataSet1.tables[0].Rows.InsertAt(newRow,0);

但是,它不会插入位置0

删除位置x的类似问题 – 这里已经解决了
>> stack overflow question

想到使用bs.insert(0,newRow),但它说外部对象无法添加到此列表中

如何在排序后在给定位置的bindingsource中添加一行?

解决方法 这是一个解决方案,可以添加到列表的顶部 – 我不知道它是否是最好的解决方案,但它的工作原理.有很多其他方法可以解决这个问题,包括制作允许插入排序列表的自己的绑定集合,从而可以从某些观点提供更好的代码,但这至少很简单.

这是代码,包括创建数据表.

public partial class Form1 : Form{    BindingSource bs;    Datatable dt;    public Form1()    {        InitializeComponent();        dt = new Datatable("Customers");        DataColumn dc;        dc = new DataColumn();        dc.DataType = typeof(int);        dc.Columnname = "CustomerID";        dt.Columns.Add(dc);        dt.Columns.Add(new DataColumn("Lastname"));        dt.Columns.Add(new DataColumn("Firstname"));        // Concatenation of first and last names         dt.Columns.Add(new DataColumn("Fullname"));        dt.Columns.Add(new DataColumn("Address"));        dt.Columns.Add(new DataColumn("City"));        dt.Columns.Add(new DataColumn("State"));        dt.Columns.Add(new DataColumn("Zip"));        dt.Columns.Add(new DataColumn("Phone"));        dc = new DataColumn();        dc.DataType = typeof(DateTime);        dc.Columnname = "LastPurchaseDate";        dt.Columns.Add(dc);        dc = new DataColumn();        dc.DataType = typeof(int);        dc.Columnname = "CustomerType";        dt.Columns.Add(dc);        dt.Columns.Add("HIDdenSort",typeof(bool));        // Populate the table         dt.Rows.Add(2,"Baggins","Bilbo","Baggins,Bilbo","Bagshot Row #1","Hobbiton","SH","00001","555-2222",DateTime.Parse("9/9/2008"),1,false);        dt.Rows.Add(1,"Frodo",Frodo","Bagshot Row #2","555-1111",false);        dt.Rows.Add(6,"Bolger","Fatty","Bolger,Fatty","ProudFeet Creek",1); dt.Rows.Add(4,"Elessar","aragorn","Elessar,aragorn","Citadel","Minas Tirith","Gondor","00000","555-0000",4,false);        dt.Rows.Add(5,"Evenstar","Arwin","Evenstar,Arwin","555-0001",false);        dt.Rows.Add(3,"Greyhame","Gandalf","Grayhame,Gandalf",dbnull.Value,3,false);        BindingSource bs = new BindingSource();        bs.DataSource = dt;        dataGrIDVIEw1.DataSource = bs;        dataGrIDVIEw1.Columns["HIDdenSort"].Visible = false;        dataGrIDVIEw1.sorted += new EventHandler(dataGrIDVIEw1_Sorted);    }    voID dataGrIDVIEw1_Sorted(object sender,EventArgs e)    {        foreach (DaTarow dr in dt.Rows)        {            dr["HIDdenSort"] = false;        }    }    private voID button1_Click(object sender,EventArgs e)    {        DaTarow dr = dt.Rows.Add(2,"Testing",true);        DataVIEw dv = dt.defaultview;        if (dataGrIDVIEw1.sortedColumn == null)        {            dv.sort = "[HIDdenSort] desc";        }        else        {            string sortname = dataGrIDVIEw1.sortedColumn.name;            dv.sort = "[HIDdenSort] desc,[" + sortname + "] asc";        }    }}

这里的技巧是向数据表中添加一个新列HIDdenSort,它允许我们根据行是否为新来对数据表进行排序.再加上从DataGrIDVIEw中获取sort列,可以保留旧的排序顺序并保持新行的位置.

总结

以上是内存溢出为你收集整理的如何在排序后在给定位置的bindingsource中添加一行? C#全部内容,希望文章能够帮你解决如何在排序后在给定位置的bindingsource中添加一行? C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1228737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存