private void button1_Click(object sender, EventArgs e)
{
//第一个视图数据
//string strtj="where 1=1 and ISNULL(fisEnd,0)=0 ";
string strtj = "where 1=1 ";
if (txtProjNr.Text.Length > 0)
strtj = strtj + " and fprojNr = '" + txtProjNr.Text + "' ";
if (txtProjName.Text.Length > 0)
strtj = strtj + " and fprojName = '" + txtProjName.Text + "' ";
SqlConnection sqlcon = DataCon.datacon.getcon();
string str = "select * from v_RscProjMd "+strtj;
SqlCommand sqlcmd = new SqlCommand(str, sqlcon);
SqlDataAdapter adapter = new SqlDataAdapter(sqlcmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "v_RscProjMd");
//第一个视图的数据放到数组里面
var query = from aaa in ds.Tables["v_RscProjMd"].AsEnumerable()
select new
{
fProjNr = aaa.Field<string>("fProjNr"),
fProjName = aaa.Field<string>("fProjName"),
fMsNr = aaa.Field<string>("MSNr"),
fMouldNr = aaa.Field<string>("fMouldNr"),
fMouldName = aaa.Field<string>("fMouldName"),
fPieceNr = aaa.Field<string>("fPieceNr"),
fpercent = aaa.Field<Int32>("fpercent"),
fProcName = aaa.Field<string>("fProcName"),
fCenterName = aaa.Field<string>("fCenterName"),
fSchBegdate = aaa.Field<DateTime?>("fSchbegDate"),
fisEnd = aaa.Field<Boolean>("fisEnd"),
};
var list1 = query.ToList();
dataGridView1.DataSource = list1;
if (list1.Count() == 0)
{
MessageBox.Show("没有符合条件的数据,请重新设置查询条件!");
return;
}
////创建DataTable
System.Data.DataTable table = new System.Data.DataTable();
string[] fProjNr = list1.Select(t => t.fProjNr).ToArray();
string[] fProjName = list1.Select(t => t.fProjName).ToArray();
string[] fMouldNr = list1.Select(t => t.fMouldNr).Distinct().ToArray();
string[] fMouldName = list1.Select(t => t.fMouldName).ToArray();
string[] fProcName = list1.Select(t => t.fProcName).Distinct().ToArray();
string[] fMsNr = list1.Select(t => t.fMsNr).Distinct().ToArray();
string[] fPieceNr = list1.Select(t => t.fPieceNr).Distinct().ToArray();
string[] fPCenterName = list1.Select(t => t.fCenterName).Distinct().ToArray();
//string[] fSchBegdate = list1.Select(t => t.fSchBegdate).Distinct().ToArray().ToString();
bool[] fisEnd = list1.Select(t => t.fisEnd).Distinct().ToArray();
// fProcName.OrderBy(t => { return t.fSchBegdate; });
////表中第一行第一列交叉处一般显示为第1列标题
table.Columns.Add(new DataColumn("項目編號"));
////表中第一行第二列交叉处一般显示为第2列标题
table.Columns.Add(new DataColumn("項目名稱"));
//表中第一行第三列交叉处一般显示为第3列标题
table.Columns.Add(new DataColumn("MS單號"));
table.Columns.Add(new DataColumn("模具編號"));
table.Columns.Add(new DataColumn("模具名稱"));
//中间活动数据标题,以工艺数为准 我这里如果想要以fschbegdate排序,应该怎么写
for (int i = 0; i < fProcName.Length; i++)
{
DataColumn column = new DataColumn(fProcName[i]);
table.Columns.Add(column);
}
//为表中各行生成数据
for (int j = 0; j < fMsNr.Length; j++)//i为模具编号总数
{
//每行第0列为行分组关键字
var row = table.NewRow();
row[0] = fProjNr[j];
row[1] = fProjName[j];
row[2] = fMsNr[j];
row[3] = fMouldNr[j];
row[4] = fMouldName[j];
for (int a = 0; a < fProcName.Length; a++)
{
//提取符合条件的工件信息。。---问题一
string[] pieceNr = list1.Where(t => t.fMsNr == fMsNr[j] && t.fProcName == fProcName[a] && !t.fisEnd).Select(t => t.fPieceNr).ToArray();
foreach (var a1 in pieceNr)
{
row[fProcName[a]] = a1;
}
}
table.Rows.Add(row);
}
dataGridView1.DataSource = table;
}
}
}
我想写入的数据,在数据库中结果如下:
运行以上代码,只能显示一行数据,我希望将同一MS单号,工艺为“快走絲加工(委外)”的所有工件编号都显示出来。
我是新手。。。请帮忙指导。。谢谢
5 个解决方案
#1
你按照同一个主key循环判断,拼接。
#2
具体怎么去做的,我在数据库里面用stuff()做到了那个效果,想知道如果不在数据库操作,直接在代码里面怎么去实现。。
我以为:
string[] pieceNr = list1.Where(t => t.fMsNr == fMsNr[j] && t.fProcName == fProcName[a] && !t.fisEnd).Select(t => t.fPieceNr).ToArray();
这个查询可以将一串值存起来,然后foreach可以出来结果,但是不行。。
#3
你现在 string[] pieceNr 里面有值吗?
如果有值就简单多了。
string.Join(",", new string[] { "a", "a1" });
能看明白这句代码吧?
linq支持,4.0以上的donet
#5
你现在 string[] pieceNr 里面有值吗?
如果有值就简单多了。
能看明白这句代码吧?
linq支持,4.0以上的donet
看上去好像可以用这个。。。去研究一下先。。。。
如果有值就简单多了。
string.Join(",", new string[] { "a", "a1" });
能看明白这句代码吧?
linq支持,4.0以上的donet
看上去好像可以用这个。。。去研究一下先。。。。
#1
你按照同一个主key循环判断,拼接。
#2
你按照同一个主key循环判断,拼接。
具体怎么去做的,我在数据库里面用stuff()做到了那个效果,想知道如果不在数据库操作,直接在代码里面怎么去实现。。
我以为:
string[] pieceNr = list1.Where(t => t.fMsNr == fMsNr[j] && t.fProcName == fProcName[a] && !t.fisEnd).Select(t => t.fPieceNr).ToArray();
这个查询可以将一串值存起来,然后foreach可以出来结果,但是不行。。
#3
你按照同一个主key循环判断,拼接。
具体怎么去做的,我在数据库里面用stuff()做到了那个效果,想知道如果不在数据库操作,直接在代码里面怎么去实现。。
我以为:
string[] pieceNr = list1.Where(t => t.fMsNr == fMsNr[j] && t.fProcName == fProcName[a] && !t.fisEnd).Select(t => t.fPieceNr).ToArray();
这个查询可以将一串值存起来,然后foreach可以出来结果,但是不行。。
你现在 string[] pieceNr 里面有值吗?
如果有值就简单多了。
string.Join(",", new string[] { "a", "a1" });
能看明白这句代码吧?
linq支持,4.0以上的donet
#4
#5
你现在 string[] pieceNr 里面有值吗?
如果有值就简单多了。
能看明白这句代码吧?
linq支持,4.0以上的donet
看上去好像可以用这个。。。去研究一下先。。。。
如果有值就简单多了。
string.Join(",", new string[] { "a", "a1" });
能看明白这句代码吧?
linq支持,4.0以上的donet
看上去好像可以用这个。。。去研究一下先。。。。