如何在使用两个数据表时清除数据表值?

时间:2015-03-05 04:44:19

标签: c# datatable

传递查询后我有两个DataTables第二个DataTable显示FirstDataTable值。请找我的代码

我的连接类是

 public class Connection
 {
  conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
  public SqlDataAdapter ad;
  public DataTable dt = new DataTable();
  public DataTable gettable(string cmdtxt)
    {
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }
        conn.Open();

        dt.Clear();

        ad = new SqlDataAdapter(cmdtxt, conn);
        ad.Fill(dt);
        return dt;
    }
  }

我的代码是

 String qry="";
 DataTable shiftdt = new DataTable();
 DataTable empdt = new DataTable();   
 qry = "select ShiftID from ShiftGroup  where ShiftName="@Shift";
 shiftdt = conn.gettable(qry);
 qry = "select EmpCode from EmployeeShift where GroupCode="@gcode";
 empdt = conn.gettable(qry);

首先,shiftdt显示正确的输出ShiftID,当前进时,empdt将第一列显示为ShiftID,将第二列显示为EmpCode。其实我不想在empdt中使用ShiftID。当我继续将Shiftdt值更改为EmpCode时。我可以知道原因吗?

  

我试过`Dot net learner,当我按照他改变代码时,我有一个   下拉类它显示错误,如

`Error  8   'Sample.Connection' does not contain a definition for 'dt' and no extension method 'dt' accepting a first argument of type 'Sample.Connection' could be found (are you missing a using directive or an assembly reference?  

。那个calss是

 public class Dropdown
{

    Connection con = new Connection();
    public void dropdwnlist(string qry, DropDownList ddl)
    {
       con.gettable(qry);
       if (con.dt.Rows.Count > 0)
       {
           if (con.dt.Columns.Count == 2)
           {
               string str1 = con.dt.Columns[0].ColumnName.ToString();
               string str2 = con.dt.Columns[1].ColumnName.ToString();
               ddl.DataValueField = str1;
               ddl.DataTextField = str2;
               ddl.DataSource = con.dt;
               ddl.DataBind();
               con.dt.Columns.Remove(str1);
               con.dt.Columns.Remove(str2);

           }
           else
           {  
               string str = con.dt.Columns[0].ColumnName.ToString();
               ddl.DataValueField = str;
               ddl.DataTextField = str;
               ddl.DataSource = con.dt;
               ddl.DataBind();
               con.dt.Columns.Remove(str);
           }

       } 
           ddl.Items.Insert(0, ("--Select--"));
    }
}  

1 个答案:

答案 0 :(得分:1)

你在类中有全局变量所以请为函数创建局部变量或在gettable函数启动时分配新的DataTable。

您修改后的代码应为

 public class Connection
{
 conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
public SqlDataAdapter ad;

public DataTable gettable(string cmdtxt)
{
    DataTable dt = new DataTable();
    if (conn.State == ConnectionState.Open)
    {
        conn.Close();
    }
    conn.Open();

    dt.Clear();

    ad = new SqlDataAdapter(cmdtxt, conn);
    ad.Fill(dt);
    return dt;
}
}

我根据您的需要修改了代码,请检查一下。

您不应该使用Connection Class DataTable(dt)变量来绑定下拉列表而是为Dropdown Class声明DataTable Variable Local并使用它来绑定Dropdown。

经过修改的下拉类代码

public class Dropdown
{

Connection con = new Connection();
public void dropdwnlist(string qry, DropDownList ddl)
{
DataTable dt =con.gettable(qry);
   if (dt.Rows.Count > 0)
   {
       if (dt.Columns.Count == 2)
       {
           string str1 = dt.Columns[0].ColumnName.ToString();
           string str2 = dt.Columns[1].ColumnName.ToString();
           ddl.DataValueField = str1;
           ddl.DataTextField = str2;
           ddl.DataSource = dt;
           ddl.DataBind();
           dt.Columns.Remove(str1);
           dt.Columns.Remove(str2);

       }
       else
       {  
           string str = dt.Columns[0].ColumnName.ToString();
           ddl.DataValueField = str;
           ddl.DataTextField = str;
           ddl.DataSource = dt;
           ddl.DataBind();
           dt.Columns.Remove(str);
       }

   } 
       ddl.Items.Insert(0, ("--Select--"));
    }
 }