C# WPF中DataGrid调用数据库的时候,发生下一条数据覆盖上一条数据,如下图两条if语句

 我来答
376710727
2016-11-05 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1287万
展开全部
你是直接 DataGrid.ItemsSource = datatable.DefaultView;
这样就是每次指定一个数据源, 他肯定是覆盖掉原有记录的。
就好比
int a;
if(xxx)
a =1 ;
if(yyy)
a =2 ;
他肯定不会输出3的。
如果需要累加的显示所有历史记录,有两种办法,
1、使用ObservableCollection 即WPF提供的动态通知类集合。

先指定DataGrid.ItemsSource = Data;
private ObservableCollection<Model.MyData> _data= null;
public IList<Model.MyData> Data
{
get { return _data?? (_data= new ObservableCollection<Model.MyData>()); }
}
每次需要查询数据库的时候Data.Add(新纪录) ; 不要去重复进行数据源绑定。
2、数据库查询时累加,
DataTable dt = new DataTable();
if(xxx)
//把查询的结果加入dt
dt.Rows.Add( newrow);
if(yyy)
dt.Rows.Add(newrow);

每次添加完 要重新绑定:DataGrid.ItemsSource = dt.DefaultView;

第二种方法效率比较低。
追问
本人菜鸟,想知道第一种方法比较详细的应用
追答

前台DataGrid控件Name = "dg" 

c#:

定义一个类 

public class MyData
{
    public int Id{set;get;}
    public string Name{set;get;} 
.....
    //类里面定义你需要显示到界面上的字段, 
}
界面后台代码
private ObservableCollection<Model.MyData> _data= null;public IList<Model.MyData> Data{get { return _data?? (_data= new ObservableCollection<Model.MyData>()); }}
void Update()
{
   var dt = sqlHelper.ExcuteDataTable(....); //查数据库拿到需要添加的数据
   foreach(DataRow row in dt.Rows)
   {
     Data.Add(new MyData()
     {
         Id = row["Id"]==DBNull.Value?0: Convert.ToInt32( row["Id"]);
        Name = row["Name "]==DBNull.Value?0: Convert.ToInt32( row["Name "); 

      });
    }
}

//不用重复去指定ItemsSource,前台界面会自动更新数据的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式