Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于使用Linq到SQL的双向数据绑定,向datagrid添加新的动态填充列的正确方法是什么_C#_Linq To Sql_Wpfdatagrid_2 Way Object Databinding - Fatal编程技术网

C# 基于使用Linq到SQL的双向数据绑定,向datagrid添加新的动态填充列的正确方法是什么

C# 基于使用Linq到SQL的双向数据绑定,向datagrid添加新的动态填充列的正确方法是什么,c#,linq-to-sql,wpfdatagrid,2-way-object-databinding,C#,Linq To Sql,Wpfdatagrid,2 Way Object Databinding,这个问题。我正在为WPF的一家小公司建立一个员工时钟系统,遇到了一个小问题。对于这个问题,我使用了两个表(在Microsoft SQL Server中)employee和Attention Employee: Id RFID First_Name Last_Name ... 1 00056472378 Bob Swagger ... 2 00056464098 Nora

这个问题。我正在为WPF的一家小公司建立一个员工时钟系统,遇到了一个小问题。对于这个问题,我使用了两个表(在Microsoft SQL Server中)employee和Attention

Employee:

Id      RFID           First_Name     Last_Name     ...
1       00056472378    Bob             Swagger      ...
2       00056464098    Nora            Blankenship  ...      

Attendance: 

Id    EID     In_Out     Date          Time
1      1        IN      2015-01-20     07:00:00
2      2        IN      2015-01-20     07:00:00
3      1        OUT     2015-01-20     11:30:00

Foreign Key is attendance.EID --> employee.Id
我想要的是运行linq to sql语句,例如:

var employees = from e in db.employees select e;
然后从那里检查每个员工的出勤情况,并创建一个名为“总计”的新字段,该字段取出勤日期和时间之间的差值,使总计+=(出勤)

一旦我拥有了整个数据组,我希望使用DataGrid对数据进行数据绑定,以便:

 Name               Date         Time        In/Out    Total_Time
Swagger, Bob       2015-1-20    07:00:00      IN     
Swagger, Bob       2015-1-20    11:30:00      Out        4
Blankenship, Nora  2015-1-20    07:00:00      IN
现在,我使用以下方法进行单向绑定:

var history =
            (from att in db.attendances
             join emp in db.employees on att.EID equals emp.Id
             orderby emp.Last_Name ascending, emp.First_Name ascending, att.Date ascending, att.Time ascending
             select new Record
             {
                 Id = att.Id,
                 EID = (int)att.EID,
                 Name = emp.Last_Name + ", " + emp.First_Name,
                 Date = att.DateString,
                 Time = att.TimeString,
                 in_out = att.in_out,
                 Total = ""
             }).ToList() as List<Record>;
var历史记录=
(来自att,以db为单位)
在att.EID上加入emp到db.employees等于emp.Id
按皇帝姓氏升序、皇帝姓氏升序、收件人日期升序、收件人时间升序排序
选择新记录
{
Id=附件Id,
EID=(int)att.EID,
名称=emp.Last\u Name+“,”emp.First\u Name,
日期=att.DateString,
时间=附件时间串,
输入输出=附件输入输出,
Total=“”
}).ToList()作为列表;
其中Record是一种新的数据结构,它只包含Total。然后,一旦我在新的结构中有了这个列表,我就会进行所有的计算,以获得每个员工的正确总时间。问题是,当我想使用datagrid进行编辑时,双向绑定不起作用,因为它具有不同的结构,所以我必须手动将它们添加到数据库中

我希望能够将Total添加到实际的历史变量中,但是它变成只读,这是不好的

任何建议都很好

对不起,这么长的帖子。我只是想说得尽可能清楚以避免任何混乱


提前感谢您的帮助。

为什么要将日期/时间数据存储为字符串?这大大限制了您在查询本身中进行计算的选项。如何对计算属性进行“双向绑定”?如果修改了
Total
,会发生什么情况?如果datetime是datetime格式,查询会是什么样子。此外,它不是字符串,但我将其存储为DateTime.Date,这样我就可以将日期和时间分开。可以改变,如果它能使它更容易。这就是我被困住的地方,因为总数不是双向的,但所有其他的都需要双向的。我希望能够更改每个记录的日期和时间,然后重新填充数据网格以获得新的总数。记录结构不是实际的考勤结构。我必须创建一个单独的结构来获得一个可写的Total字段。记录结构仅将日期时间保存为字符串,以便正确显示,但主考勤结构使用datetime存储实际日期。