在红色的地方我做了两个循环,可是当i=1的时候又会创建一个“应发奖金”的列头, dt.Columns.Add这个怎么放在外面怎么把这个我想不出来怎么弄了。。。

qq_32320747 2018-03-23 02:36:05

在红色的地方我做了两个循环,可是当i=1的时候又会创建一个“应发奖金”的列头, dt.Columns.Add这个怎么把Columns.Add 只调用一次,然后再循环给每行的这个列赋值?
 public List<DataContract.ClinicInCharge.Records_Moneys> Querydgvlist(string months)//
{
DataContract.ClinicInCharge.RecordMoney_Add Add = new DataContract.ClinicInCharge.RecordMoney_Add();
List<DataContract.ClinicInCharge.RecordMoney_Add> Adds = new List<DataContract.ClinicInCharge.RecordMoney_Add>();
string sql = string.Empty, err = string.Empty;
DataTable dt = new DataTable();
sql = string.Format(@"

SELECT a.months, b.dept_code ,b.dept_name ,
c.user_code , isnull(c.user_name,username) as user_name,a.moneys,e.tax
,a.userid,a.deptid,a.id,a.RecordUser,a.RecordTime,a.iscw,a.isExtra
FROM Records_Moneys a
inner join public_dept_list b on a.deptid=b.deptid
left outer join public_user_list c on c.userid=a.userid
left join RecordMoney_tax e on a.userid=e.userid
where a.months='{0}'
order by a.months
", months);
dt = SqlHelper.QueryFromDatabase(ThisConn.sCono, sql, out err);
List<DataContract.ClinicInCharge.public_dataselect> itemNameselects =
ThisHQ.Base.Base.取基础数据列表s(DataContract.Enums.DataSelect.奖金分类.ToString());
DataTable dtCover = DataConverter.FillDataTable(itemNameselects.ToList());
if (dtCover.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Rows.Count; j++)
{
Add.MoneyID = DataConverter.ToInt(dt.Rows[i]["id"]);
Add.itemName = dtCover.Rows[i]["colvalue"].ToString();
dt.Columns.Add(Add.itemName, Type.GetType("System.String"));
DataTable dt1 = QueryMoneys(Add);
if (dt1.Rows.Count != 0)
{
Add.Moneys = DataConverter.ToDecimal(dt1.Rows[0]["Moneys"]);
}
else
{
Add.Moneys = 0;
}
dt.Rows[i][Add.itemName] = Add.Moneys;
}
}
}
if (err.Length > 0)
{
throw new Exception(err);
}
return DataConverter.DataTableToIList<DataContract.ClinicInCharge.Records_Moneys>(dt).ToList();
}
...全文
246 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-03-23
  • 打赏
  • 举报
回复
dt.Columns 不是有 Contains 方法吗? // 摘要: // 检查集合是否包含具有指定名称的列。 // // 参数: // name: // 要查找的列的 System.Data.DataColumn.ColumnName。 // // 返回结果: // 如果存在此名称的列,则为 true;否则为 false。 public bool Contains(string name);
zyy1111111 2018-03-23
  • 打赏
  • 举报
回复

 for (int i = 0; i < dtCover.Rows.Count; i++)
                {
                    Add.itemName = dtCover.Rows[i]["colvalue"].ToString();
                    dt.Columns.Add(Add.itemName, Type.GetType("System.String"));
                    for (int j = 0; j < dt.Rows.Count; j++)
                    {
                        Add.MoneyID = DataConverter.ToInt(dt.Rows[j]["id"]);
                        DataTable dt1 = QueryMoneys(Add);
                        if (dt1.Rows.Count != 0)
                        {
                            Add.Moneys = DataConverter.ToDecimal(dt1.Rows[0]["Moneys"]);
                        }
                        else
                        {
                            Add.Moneys = 0;
                        }
                        dt.Rows[j][Add.itemName] = Add.Moneys;
                    }
qq_32320747 2018-03-23
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
判断一下,已建立就不建立 你嵌套对 dt.Rows 的循环,只会徒增重复内容 需要的是两个并列的循环 第一个创建列 第二个充填数据
我还是不知道,怎么判断datatable有没有建立重复的列,我的列不是select得到的不能用if exists吧
qq_32320747 2018-03-23
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
判断一下,已建立就不建立 你嵌套对 dt.Rows 的循环,只会徒增重复内容 需要的是两个并列的循环 第一个创建列 第二个充填数据
哦哦哦,我知道了
qq_32320747 2018-03-23
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
判断一下,已建立就不建立 你嵌套对 dt.Rows 的循环,只会徒增重复内容 需要的是两个并列的循环 第一个创建列 第二个充填数据
可是我
    for (int i = 0; i < dtCover.Rows.Count; i++)
                {
                    Add.itemName = dtCover.Rows[i]["colvalue"].ToString();
                    dt.Columns.Add(Add.itemName, Type.GetType("System.String"));
                }
                    for (int j = 0; j < dt.Rows.Count; j++)
                    {
                        Add.MoneyID = DataConverter.ToInt(dt.Rows[j]["id"]);
                     
                        DataTable dt1 = QueryMoneys(Add);
                        if (dt1.Rows.Count != 0)
                        {
                            Add.Moneys = DataConverter.ToDecimal(dt1.Rows[0]["Moneys"]);
                        }
                        else
                        {
                            Add.Moneys = 0;
                        }
                        dt.Rows[j][Add.itemName] = Add.Moneys;
                    }
这样子写只会存入最后一列的数值。。
xuzuning 2018-03-23
  • 打赏
  • 举报
回复
判断一下,已建立就不建立 你嵌套对 dt.Rows 的循环,只会徒增重复内容 需要的是两个并列的循环 第一个创建列 第二个充填数据

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧