0

我正在尝试将我的代码分成类文件。但是我遇到的问题是如何访问类文件dataGridviewLogging中包含Form1的内容?

public void getLogging(String sql)
{
    SqlDataAdapter dataadapter = new SqlDataAdapter(sql, mycon);       
    DataSet ds = new DataSet();

    try
    {
        dataadapter.Fill(ds, "LOG_MESSAGE");
        dataGridViewLogging.DataSource = ds;
        dataGridViewLogging.DataMember = "LOG_MESSAGE";
    }
    catch (Exception f)
    {
        Console.WriteLine(f.ToString());
        MessageBox.Show("FAILURE:" + f.ToString());
        return;
    }
}

我一直在想一种方法可以做到这一点?想法?

4

2 回答 2

0

你可以做一些像层架构......演示,业务逻辑和数据访问。

创建一个将字符串作为命令文本的方法或函数,指定您的命令类型(SP 或内联命令)

使用它来获取 DataSet 或 DataTable 作为返回对象。

Public DataTable GetDataTableFromDB(String CommandText,
                                    SqlCommandType type,
                                    SqlParameter [] param)
{
    DataTable temp=somthing;
    /* your logic */
    return DataTable;
}

将此用作类文件并在您的 form1 类或 form1.cs 中获取您的数据集(如果您是 c#bee)

玩得开心,毕竟代码很有趣!

于 2012-10-25T12:47:10.203 回答
0

由于您的方法已命名getLogging,因此您希望返回可用作数据源的数据。因此,与其在此处设置数据源,不如将其设置在可以访问数据绑定控件的位置。

例如(在 Form1 中):

dataGridViewLogging.DataSource = getLogging(
          DateTime.Today.AddMonths(-6)
        , DateTime.Today);  // don't pass the sql directly, use parameters instead

在你的课堂上:

public DataSet getLogging(DateTime logFrom, DateTime logTo)
{
    DataSet ds = new DataSet();
    const string sql = "SELECT Columns FROM dbo.Table WHERE LoggedAt BETWEEN @LoggedFrom AND @LoggedTo ... ODRER BY ...";
    using (var mycon = new SqlConnection(connectionString))
    using (var da = new SqlDataAdapter(sql, mycon))
    {
        da.SelectCommand.Parameters.AddWithValue("@LoggedFrom", logFrom);
        da.SelectCommand.Parameters.AddWithValue("@LoggedTo", logFrom);
        try
        {
            da.Fill(ds);
        } catch (Exception f)
        {
            // log here
            throw;
        }
    }
    return ds;
}
于 2012-10-25T12:37:27.543 回答