C# 如何使用数据表在网格视图中显示所有数据库数据?

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

我的datatbase中有5个数据,这些数据我想使用数据表显示在gridView中。但是我的代码只显示GridView中最后绑定的数据?我的密码是。请指出错误

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