Asp.net 我可以将相同的datareader对象绑定到2个控件吗?
我正在尝试将同一个数据读取器对象绑定到两个控件。一个是gridview,另一个是formview。gridview正在绑定,但它没有绑定formview。甚至在绑定这两个控件后,我也正在关闭该对象。 有人能告诉我这是否可行吗?如果可以,怎么办 这是我的代码:-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
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。