Asp.net 我可以将相同的datareader对象绑定到2个控件吗?

Asp.net 我可以将相同的datareader对象绑定到2个控件吗?,asp.net,binding,controls,datareader,Asp.net,Binding,Controls,Datareader,我正在尝试将同一个数据读取器对象绑定到两个控件。一个是gridview,另一个是formview。gridview正在绑定,但它没有绑定formview。甚至在绑定这两个控件后,我也正在关闭该对象。 有人能告诉我这是否可行吗?如果可以,怎么办 这是我的代码:- SqlConnection con = new SqlConnection(getconnectionstring()); SqlCommand cmd = new SqlCommand(); SqlCommand c

我正在尝试将同一个数据读取器对象绑定到两个控件。一个是gridview,另一个是formview。gridview正在绑定,但它没有绑定formview。甚至在绑定这两个控件后,我也正在关闭该对象。 有人能告诉我这是否可行吗?如果可以,怎么办

这是我的代码:-

   SqlConnection con = new SqlConnection(getconnectionstring());
   SqlCommand cmd = new SqlCommand();
    SqlCommand cmd1 = new SqlCommand();

   //cmd.CommandText = "SELECT firstname,lastname FROM crudtable";  
    cmd.CommandText = "SELECT firstname,lastname FROM crudtable";
    cmd1.CommandText = "SELECT firstname FROM crudtable";

    cmd.Connection = con;
    cmd1.Connection = con;

    con.Open();

    SqlDataReader reader ;
    SqlDataReader reader1;

    reader = cmd.ExecuteReader();
    GridView1.DataSource = reader;
    GridView1.DataBind();

    FormView1.DataSource = reader;
    FormView1.DataBind();
    reader.Close();
    reader1 = cmd1.ExecuteReader();
    ddl.DataSource = reader1;
    ddl.DataTextField = "firstname";
    ddl.DataBind();
提前感谢。

是一个仅供转发的读者

提供一种从SQL中读取仅向前的行流的方法 服务器数据库

一旦读取了数据,就不能再回去读取。 这就是为什么在不再次调用ExecuteReader的情况下,不能将同一个读卡器用作另一个控件的数据源

如果获得的行数很小,则可以将数据提取到数据集中,并将其绑定到这两个数据集中

SqlConnection conn = new SqlConnection(ConnectionString);
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT firstname,lastname FROM crudtable";
da.SelectCommand = cmd;
DataSet ds = new DataSet();
conn.Open();
da.Fill(ds);
conn.Close();

GridView1.DataSource = ds;
GridView1.DataBind();

FormView1.DataSource = ds;
FormView1.DataBind();
ddl.DataSource = ds;
ddl.DataTextField = "firstname";
ddl.DataBind();
一旦数据集中有了数据,您就可以决定绑定和显示哪些列。

是一个仅向前的阅读器

提供一种从SQL中读取仅向前的行流的方法 服务器数据库

一旦读取了数据,就不能再回去读取。 这就是为什么在不再次调用ExecuteReader的情况下,不能将同一个读卡器用作另一个控件的数据源

如果获得的行数很小,则可以将数据提取到数据集中,并将其绑定到这两个数据集中

SqlConnection conn = new SqlConnection(ConnectionString);
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT firstname,lastname FROM crudtable";
da.SelectCommand = cmd;
DataSet ds = new DataSet();
conn.Open();
da.Fill(ds);
conn.Close();

GridView1.DataSource = ds;
GridView1.DataBind();

FormView1.DataSource = ds;
FormView1.DataBind();
ddl.DataSource = ds;
ddl.DataTextField = "firstname";
ddl.DataBind();

一旦数据集中有了数据,就可以决定绑定和显示哪些列。

对于本例中最精简的绑定版本,我将修改如下代码:

DataTable results = new DataTable();
using (SqlConnection connection = new SqlConnection(getconnectionstring()))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand("SELECT firstname,lastname FROM crudtable",connection))
    {
        results.Load(command.ExecuteReader());
    }
}

GridView1.DataSource = results;
GridView1.DataBind();

FormView1.DataSource = results;
FormView1.DataBind();

ddl.DataSource = results;
ddl.DataTextField = "firstname";
ddl.DataBind();

对于本例中最精简的绑定版本,我将对代码进行如下修改:

DataTable results = new DataTable();
using (SqlConnection connection = new SqlConnection(getconnectionstring()))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand("SELECT firstname,lastname FROM crudtable",connection))
    {
        results.Load(command.ExecuteReader());
    }
}

GridView1.DataSource = results;
GridView1.DataBind();

FormView1.DataSource = results;
FormView1.DataBind();

ddl.DataSource = results;
ddl.DataTextField = "firstname";
ddl.DataBind();

最后,我使用了一个新的reader对象来绑定formview,但它仍然不起作用。我是在什么地方错了还是遗漏了什么。 没有异常,没有错误。 这是更新的代码

    SqlConnection con = new SqlConnection(getconnectionstring());
    SqlCommand cmd = new SqlCommand();
    SqlCommand cmd1 = new SqlCommand();
    SqlCommand cmd2 = new SqlCommand();

   //cmd.CommandText = "SELECT firstname,lastname FROM crudtable";  
    cmd.CommandText = "SELECT firstname,lastname FROM crudtable";
    cmd2.CommandText = "SELECT firstname,lastname FROM crudtable";
    cmd1.CommandText = "SELECT firstname FROM crudtable";

    cmd.Connection = con;
    cmd1.Connection = con;
    cmd2.Connection=con;
    con.Open();

    SqlDataReader reader ;
    SqlDataReader reader1;
    SqlDataReader reader2;
    reader = cmd.ExecuteReader();


    GridView1.DataSource = reader;
    GridView1.DataBind();
    reader.Close();
    //reader.Close();
    reader2 = cmd2.ExecuteReader();
    FormView1.DataSource = reader2;
    FormView1.DataBind();
    reader2.Close();
    reader1 = cmd1.ExecuteReader();
    ddl.DataSource = reader1;
    ddl.DataTextField = "firstname";
    ddl.DataBind();
    reader1.Close();

最后,我使用了一个新的reader对象来绑定formview,但它仍然不起作用。我是在什么地方错了还是遗漏了什么。 没有异常,没有错误。 这是更新的代码

    SqlConnection con = new SqlConnection(getconnectionstring());
    SqlCommand cmd = new SqlCommand();
    SqlCommand cmd1 = new SqlCommand();
    SqlCommand cmd2 = new SqlCommand();

   //cmd.CommandText = "SELECT firstname,lastname FROM crudtable";  
    cmd.CommandText = "SELECT firstname,lastname FROM crudtable";
    cmd2.CommandText = "SELECT firstname,lastname FROM crudtable";
    cmd1.CommandText = "SELECT firstname FROM crudtable";

    cmd.Connection = con;
    cmd1.Connection = con;
    cmd2.Connection=con;
    con.Open();

    SqlDataReader reader ;
    SqlDataReader reader1;
    SqlDataReader reader2;
    reader = cmd.ExecuteReader();


    GridView1.DataSource = reader;
    GridView1.DataBind();
    reader.Close();
    //reader.Close();
    reader2 = cmd2.ExecuteReader();
    FormView1.DataSource = reader2;
    FormView1.DataBind();
    reader2.Close();
    reader1 = cmd1.ExecuteReader();
    ddl.DataSource = reader1;
    ddl.DataTextField = "firstname";
    ddl.DataBind();
    reader1.Close();

若2个控件未绑定到1个数据源,则获取该数据源并将其绑定到表,然后复制该表 并将其数据绑定到另一个表中,并单独绑定

DataTable.clone将获取该结构。 DatTable.Copy将获取架构和记录


若2个控件未绑定到1个数据源,则获取该数据源并将其绑定到表,然后复制该表 并将其数据绑定到另一个表中,并单独绑定

DataTable.clone将获取该结构。 DatTable.Copy将获取架构和记录


请查看更新的代码。reader对象在绑定到两个控件后只需关闭一次。当然可以,但它现在工作了吗?我没有收到异常。它工作正常。网格有它的数据,但表单视图没有。因为它无法绑定。请查看更新的代码。reader对象在绑定到两个控件后只需关闭一次。是的,当然,但它现在工作了吗?我没有得到异常。它工作正常。网格有它的数据,但窗体视图没有。因为它无法绑定。它没有绑定窗体视图和dd1。它没有绑定窗体视图和dd1。