Mohan Lal
Mohan Lal

Reputation: 153

How to clear datatable values when using two datatables?

I have two DataTables after passing query the second DataTable Shows the FirstDataTable values. Please find my code

My connection class is

 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;
    }
  }

My code is

 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);

First,shiftdt shows proper output ShiftID and when go ahead empdt shows first column as ShiftID and Second Column as EmpCode. Actually I dont want ShiftID in empdt. And again when I go ahead Shiftdt values changes to EmpCode. May I know the reason?

I tried `Dot net learner,when I change code as per him, I have a dropdown class it shows error like

`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?  

. That calss is

 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--"));
    }
}  

Upvotes: 0

Views: 192

Answers (1)

Nikunj Ratanpara
Nikunj Ratanpara

Reputation: 148

You Have dt as Global variable in Class So Please Make it Local variable for Function or Assign new DataTable on starting of gettable function.

Your revised Code should be

 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;
}
}

I had revised code as per your need please check it.

You shouldn't use Connection Class DataTable(dt) Variable to bind dropdown instead Declare DataTable Variable Local for Dropdown Class and use it to bind Dropdown.

Revised Code for Dropdown Class

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--"));
    }
 }  

Upvotes: 1

Related Questions