C# 如何使用数据表在网格视图中显示所有数据库数据?
我的datatbase中有5个数据,这些数据我想使用数据表显示在gridView中。但是我的代码只显示GridView中最后绑定的数据?我的密码是。请指出错误C# 如何使用数据表在网格视图中显示所有数据库数据?,c#,gridview,datatable,C#,Gridview,Datatable,我的datatbase中有5个数据,这些数据我想使用数据表显示在gridView中。但是我的代码只显示GridView中最后绑定的数据?我的密码是。请指出错误 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString); SqlCommand cmd = new SqlCommand("select Date from
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
SqlCommand cmd = new SqlCommand("select Date from MusterRoll where EmpCode='"+code+"' and Month='1' and Year='2015'", conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
var rows = ds.Tables[0].Rows;
foreach (DataRow row in rows)
{
string date1 = Convert.ToString(row["Date"]);
DateTime date2 = Convert.ToDateTime(date1);
SqlCommand cmd1 = new SqlCommand(" select TOP 1 m.EmpCode,m.NOH,m.OT,m.Late,m.Early,convert(varchar(10),m.Date,103)AS DATE,convert(varchar(10),s1.Shiftname,103)AS Shift From ShiftChange s,ShiftType s1,MusterRoll m WHERE s1.ShiftID=s.NShiftID and '" + date2 + "'>=Fromdate and Todate>='" + date2 + "' and m.Month = '1' and m.date='"+date2+"' and m.EmpCode='Neena' order by Todate desc", conn);
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
sda1.Fill(dt);
//var rows1 = ds.Tables[0].Rows;
for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
{
DataRow rpw = dt.Rows[rowIndex];
string EmpCode = rpw.Field<string>("EmpCode");
string NOH = rpw.Field<string>("NOH");
string OT = rpw.Field<string>("OT");
string Latae = rpw.Field<string>("Late");
string Early = rpw.Field<string>("Early");
string date3 =rpw.Field<string>("Date");
string Shift = rpw.Field<string>("Shift");
gvSingleemp.Visible = true;
gvSingleemp.DataSource = dt;
gvSingleemp.DataBind();
}
}
SqlConnection-conn=新的SqlConnection(ConfigurationManager.ConnectionStrings[“ApplicationServices”].ConnectionString);
SqlCommand cmd=new SqlCommand(“从MusterRoll中选择日期,其中EmpCode='“+code+”'和Month='1'和Year='2015',康涅狄格州);
SqlDataAdapter sda=新的SqlDataAdapter(cmd);
数据集ds=新数据集();
sda.填充(ds);
var rows=ds.Tables[0]。行;
foreach(数据行中的行)
{
字符串date1=Convert.ToString(行[“日期”]);
DateTime date2=Convert.ToDateTime(date1);
SqlCommand cmd1=新建SqlCommand(“选择前1个m.EmpCode、m.NOH、m.OT、m.Late、m.Early、convert(varchar(10)、m.Date、103)作为日期、convert(varchar(10)、s1.Shiftname、103)作为ShiftChange s的班次、ShiftType s1、MusterRoll m,其中s1.ShiftID=s.NShiftID和“+date2+”>=Fromdate和Todate>=“+date2+”,以及m.MOUNT='1和m.date2=“+date2+”+“和m.EmpCode='Neena'命令由Todate desc发布”,康涅狄格州);
SqlDataAdapter sda1=新的SqlDataAdapter(cmd1);
DataTable dt=新的DataTable();
sda1.填充(dt);
//var rows1=ds.Tables[0]。行;
对于(int rowIndex=0;rowIndex
在我的班次更改表中,没有日期字段,而没有fromDate和ToDate字段。我希望根据MusterRoll表日期显示员工班次。因此,首先我选择MusterRoll date并检查此日期是否存在于班次更改fromDate和ToDate之间(如果存在)显示班次g循环中的
GridView
。不需要循环,只需将其绑定到DataTable
:
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
sda1.Fill(dt);
gvSingleemp.DataSource = dt;
gvSingleemp.DataBind();
我仍然认为您根本不需要这些循环。我猜您希望从EmpDetails
中选择所有记录,其中EmpCode=code
和MusterRoll.Month='1'和MusterRoll.Year='2015'
。然后您只需要一个sql查询来填充一个数据表,该数据表可用作gvsinglemp
。正确吗
如果是这样的话,这应该是可行的(请注意,我使用语句和sql参数):
如果不想加入表,也可以使用EXISTS
:
string sql = @"SELECT ed.EmpCode, ed.Name, ed.Age, ed.Date
FROM EmpDetails ed
WHERE EXISTS
(
SELECT 1 FROM MusterRoll mr
WHERE mr.EmpCode = @EmpCode
AND mr.Month = 1 AND mr.Year=2015
AND mr.Date = ed.Date
)";
您正在将GridView
数据绑定到一个循环中。您不需要该循环,只需将其绑定到DataTable
:
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
sda1.Fill(dt);
gvSingleemp.DataSource = dt;
gvSingleemp.DataBind();
我仍然认为您根本不需要这些循环。我猜您希望从EmpDetails
中选择所有记录,其中EmpCode=code
和MusterRoll.Month='1'和MusterRoll.Year='2015'
。然后您只需要一个sql查询来填充一个数据表,该数据表可用作gvsinglemp
。正确吗
如果是这样的话,这应该是可行的(请注意,我使用语句和sql参数):
如果不想加入表,也可以使用EXISTS
:
string sql = @"SELECT ed.EmpCode, ed.Name, ed.Age, ed.Date
FROM EmpDetails ed
WHERE EXISTS
(
SELECT 1 FROM MusterRoll mr
WHERE mr.EmpCode = @EmpCode
AND mr.Month = 1 AND mr.Year=2015
AND mr.Date = ed.Date
)";
不必使用循环将DT绑定到GridView:
SqlCommand cmd1 = new SqlCommand(" select EmpCode,Name,Date,Age from EmpDetails where CompanyID='1'", conn);
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
sda1.Fill(dt);
gvSingleemp.DataSource =dt;
gvSingleemp.DataBind();
不必使用循环将DT绑定到GridView:
SqlCommand cmd1 = new SqlCommand(" select EmpCode,Name,Date,Age from EmpDetails where CompanyID='1'", conn);
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
sda1.Fill(dt);
gvSingleemp.DataSource =dt;
gvSingleemp.DataBind();
事实上,这是一个很大的代码,我简单地回答了你所有我不能使用的问题,没有循环查看我更新的问题否我想从EmpDetails中选择记录,其中日期=(从第一次查询得到的日期).我的意思是,如果日期=2014-01-01,则仅显示MusterRoll的此日期记录database@SaraJohn:我已删除加入条件,即它们需要相同的EmpCode
,但仅通过日期链接。Edit还提供了一种EXISTS
方法,这似乎是最好的方法。是否有其他方法与您沟通。我将在这里展示我的整个数据库代码。你说的是绝对正确的,但它不是我想要的东西want@SaraJohn:然后你必须详细解释你想要的:)事实上,这是一个大代码,我简单地回答了你所有我无法使用的问题,没有循环查看我更新的问题否我想从EMPDealties中选择记录,其中日期=(从第一次查询获取的日期).我的意思是,如果日期=2014-01-01,则仅显示MusterRoll的此日期记录database@SaraJohn:我已删除加入条件,即它们需要相同的EmpCode
,但仅通过日期链接。Edit还提供了一种EXISTS
方法,这似乎是最好的方法。是否有其他方法与您沟通。我将在这里展示我的整个数据库代码。你说的是绝对正确的,但它不是我想要的东西want@SaraJohn:然后您必须详细解释您想要的:)顺便说一句,不要使用dt.Rows[0].ItemArray[0].ToString()
,而是rpw.Field(“EmpCode”)
。您的代码总是使用循环中的第一行而不是当前行。我不明白您想做什么。您选择日期,然后根据此日期循环它们以从EmpDetails
中选择数据。但是您想在哪里显示这些记录?您想多个GridView吗?如果不想,为什么不链接MusterRoll
和EmpDetails
通过EmpCode
?然后您在一个查询中拥有所有数据,表中包含所有数据。@Tim Schmelter,好的,您可以指导我如何使用foreach循环和DataTable填充GridView吗?我的观点是,您不需要这些循环。我猜您希望从EmpDetails
w中选择所有记录这里的EmpCode
是=code