Заполнить данные в классе, вернуть таблицу для использования в другом классе - PullRequest
0 голосов
/ 15 декабря 2011

ОК Название может быть неясным, поэтому позвольте мне объяснить.У меня есть 2 класса, «Form1» и «webinfo».

в «webinfo» я запускаю следующий код:

class WebInfo
{
    string myConnVRM = "Data Source = datascource;" +
                          "Initial Catalog = catalog;" +
                          "Persist Security Info=True;" +
                          "User ID=ID;" +
                          "Password=PASS;" +
                          "providerName=System.Data.SqlClient;";
    public WebInfo()
    {

    }

    public void GetVRMs(string vRMs, string start, string end, string acc)
    {
        DataTable vrmTable = new DataTable();
        SqlConnection connVRM = new SqlConnection(myConnVRM);
        connVRM.Open();
        SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
        cmdVRM.Parameters.AddWithValue("@acct", acc);
        cmdVRM.Parameters.AddWithValue("@from", start);
        cmdVRM.Parameters.AddWithValue("@too", end);
        SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM);
        vrmAdapter.Fill(vrmTable);

        //bind to data grid and display??
    }
}

, как вы видите, я подключаюсь к серверу, запускаюзапрос и, наконец, заполните мою таблицу с результатами.

мой класс формы затем вызывает метод GetVRms, передает соответствующую информацию.

Но теперь мне нужно привязать эту таблицу к таблице данных намоя форма, чтобы я мог отобразить.Единственная проблема в том, как мне использовать таблицу из этого класса?

Полностью ли я обдумал это?это так же просто, как webinfo.vrmtable?

Заранее большое спасибо

Ответы [ 6 ]

2 голосов
/ 15 декабря 2011

Ваш SQL здесь тоже кажется неправильным.

   SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
        cmdVRM.Parameters.AddWithValue("@acct", acc);
        cmdVRM.Parameters.AddWithValue("@StartDate", start);
        cmdVRM.Parameters.AddWithValue("@EndDate", end);

OR

    string SQL = "SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(datetime,[Date],101) between '"+ start +"' and '"+ end +"' and [AC]=" + acc+ "; ";
          SqlCommand cmdVRM = new SqlCommand(SQL, connVRM);

Теперь вы можете использовать его так, как вам нравится.

// As DataTable is ref
public void GetVRMs(string vRMs, string start, string end, string acc, DataTable dtVM)
{
if(dtVM == null) throw new Exception("Message");
   ......
}

OR

public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
  DataTable dtVM=new DataTable();
  .......

  Return dtVM;
}
2 голосов
/ 15 декабря 2011

Это действительно зависит от намерения. Если это служебный метод, то заставьте его вернуть данные, т.е.

public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
    ...
    return vrmTable;
}

и доступ как var data = obj.GetVRMs(...).

Если таблицу нужно сохранить, сохраните ее где-нибудь

public DataTable TheTable {get;set;}
public void GetVRMs(string vRMs, string start, string end, string acc)
{
    ...
    TheTable = vrmTable;
}

и доступ как:

obj.GetVRMs(..);
var data = obj.TheTable;

Примечания:

  • GetVRMs возможно, сокращенно
  • DataTable работает , но многие люди считают модель типа лучшей метафорой
  • вам нужно using операторов и т. Д., Чтобы избежать проблем (наиболее очевидно: насыщение пула соединений)
1 голос
/ 15 декабря 2011

вы можете использовать тип возврата как DataTable вместо void для GetVRMs метода, чтобы вернуть таблицу, т.е. vrmTable, а затем назначить ее источнику данных сетки данных

1 голос
/ 15 декабря 2011

Почему бы вам просто не вернуть DataTable?

public DataTable GetVRMs(string vRMs, string start, string end, string acc) 
{        
    [...]
    return vrmTable;
}
1 голос
/ 15 декабря 2011

Измените

    public void GetVRMs(string vRMs, string start, string end, string acc)

на

    public DataTable GetVRMs(string vRMs, string start, string end, string acc)

, затем поместите

    return vrmTable;

в конце метода.

Затем привяжите ктаблица в вашем пользовательском интерфейсе выглядит так:

    WebInfo wi = new WebInfo();
    DataTable dt = wi.GetVRMs(....);
    myDataGridView.DataSource = dt;
    myDataGridView.DataBind();
1 голос
/ 15 декабря 2011

Определение открытого свойства vrmtable и доступ к нему из любого места с помощью объекта класса WebInfo.

class WebInfo
{
    public DataTable vrmTable{get;} 

    string myConnVRM = "Data Source = datascource;" +
                          "Initial Catalog = catalog;" +
                          "Persist Security Info=True;" +
                          "User ID=ID;" +
                          "Password=PASS;" +
                          "providerName=System.Data.SqlClient;";
    public WebInfo()
    {

    }

    public void GetVRMs(string vRMs, string start, string end, string acc)
    {
        SqlConnection connVRM = new SqlConnection(myConnVRM);
        vrmTable == new DataTable();
        connVRM.Open();
        SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
        cmdVRM.Parameters.AddWithValue("@acct", acc);
        cmdVRM.Parameters.AddWithValue("@from", start);
        cmdVRM.Parameters.AddWithValue("@too", end);
        SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM);
        vrmAdapter.Fill(vrmTable);

        //bind to data grid and display??
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...