
怎么利用第二级的dropdownlist来控制gridview对表的选择?
有两个dropdownlist,dropdownlist1是用来控制dropdownlist2的输出的,代码如下protectedvoidDropDownList1_Se...
有两个dropdownlist,dropdownlist1是用来控制dropdownlist2的输出的,代码如下
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.DropDownList2.Items.Clear();
switch (this.DropDownList1.SelectedValue)
{
case "08":
this.DropDownList2.Items.Add("08多媒体");
this.DropDownList2.Items.Add("08网工");
this.DropDownList2.Items.Add("08网设");
this.DropDownList2.Items.Add("08互联网");
this.DropDownList2.Items.Add("08网络多媒体");
break;
case "09":
this.DropDownList2.Items.Add("09多媒体");
this.DropDownList2.Items.Add("09网工");
this.DropDownList2.Items.Add("09网设");
this.DropDownList2.Items.Add("09互联网");
this.DropDownList2.Items.Add("09网络多媒体");
break;
case "10":
this.DropDownList2.Items.Add("10多媒体");
this.DropDownList2.Items.Add("10网工");
this.DropDownList2.Items.Add("10网设");
this.DropDownList2.Items.Add("10互联网");
this.DropDownList2.Items.Add("10网络多媒体");
break;
case "11":
this.DropDownList2.Items.Add("11多媒体");
this.DropDownList2.Items.Add("11网工");
this.DropDownList2.Items.Add("11网设");
this.DropDownList2.Items.Add("11互联网");
this.DropDownList2.Items.Add("11网络多媒体");
break;
}
}
------------------------------------------------------
我主要是想利用dropdownlist2的选择,来确定gridview选择哪张表来查询,比如我在08级那每个班都建立了一个表,表的名字是班的名字,当我选择08互联网的时候,gridview对应查询该班的表
后台代码如下------------------
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
string sql = "select * from " + this.DropDownList2.SelectedValue ;
this.GridView1.DataSource = ReturnDataTable(sql);
this.GridView1.DataBind();
}
public static DataTable ReturnDataTable(string cmdtext)
{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\WebSite1\App_Data\czm.mdf;Integrated Security=True;User Instance=True";
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand();
cmd = new SqlCommand(cmdtext, cn);
cmd.CommandType = CommandType.Text; ;
SqlDataReader dr = null;
using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(dr);
}
return dt;
}
}
----------
请问哪里不行了?
vs提示
ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 展开
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.DropDownList2.Items.Clear();
switch (this.DropDownList1.SelectedValue)
{
case "08":
this.DropDownList2.Items.Add("08多媒体");
this.DropDownList2.Items.Add("08网工");
this.DropDownList2.Items.Add("08网设");
this.DropDownList2.Items.Add("08互联网");
this.DropDownList2.Items.Add("08网络多媒体");
break;
case "09":
this.DropDownList2.Items.Add("09多媒体");
this.DropDownList2.Items.Add("09网工");
this.DropDownList2.Items.Add("09网设");
this.DropDownList2.Items.Add("09互联网");
this.DropDownList2.Items.Add("09网络多媒体");
break;
case "10":
this.DropDownList2.Items.Add("10多媒体");
this.DropDownList2.Items.Add("10网工");
this.DropDownList2.Items.Add("10网设");
this.DropDownList2.Items.Add("10互联网");
this.DropDownList2.Items.Add("10网络多媒体");
break;
case "11":
this.DropDownList2.Items.Add("11多媒体");
this.DropDownList2.Items.Add("11网工");
this.DropDownList2.Items.Add("11网设");
this.DropDownList2.Items.Add("11互联网");
this.DropDownList2.Items.Add("11网络多媒体");
break;
}
}
------------------------------------------------------
我主要是想利用dropdownlist2的选择,来确定gridview选择哪张表来查询,比如我在08级那每个班都建立了一个表,表的名字是班的名字,当我选择08互联网的时候,gridview对应查询该班的表
后台代码如下------------------
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
string sql = "select * from " + this.DropDownList2.SelectedValue ;
this.GridView1.DataSource = ReturnDataTable(sql);
this.GridView1.DataBind();
}
public static DataTable ReturnDataTable(string cmdtext)
{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\WebSite1\App_Data\czm.mdf;Integrated Security=True;User Instance=True";
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand();
cmd = new SqlCommand(cmdtext, cn);
cmd.CommandType = CommandType.Text; ;
SqlDataReader dr = null;
using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(dr);
}
return dt;
}
}
----------
请问哪里不行了?
vs提示
ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 展开
4个回答
展开全部
cmd = new SqlCommand(cmdtext, cn);
cmd.CommandType = CommandType.Text; ;
该为:
cn.Open(); //少了这行
所以会报错:ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
cmd = new SqlCommand(cmdtext, cn);
cmd.CommandType = CommandType.Text;
另外感觉这里有问题:
string sql = "select * from " + this.DropDownList2.SelectedValue ;
//这里的DropDownList2.SelectedValue ,得到的是 “08网工”、“08网设”、以及“09互联网”这样的值, 不知到你说的“表的名字是班的名字”中的“表的名字”是否对应于“08网工”、“08网设”、以及“09互联网”这样的值,
假如不对应的话,gridview控件应该是绑定不上数据的~~~~
帮你优化一下:
public static DataTable ReturnDataTable(string cmdtext)
{
DataTable dt = new DataTable();
string strConn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\WebSite1\App_Data\czm.mdf;Integrated Security=True;User Instance=True";
using(SqlConnection cn = new SqlConnection(strConn))
{
using(SqlCommand cmd = new SqlCommand(cmdtext,cn))
{
cn.Open();
using(SqlDataReader dr = cmd.ExecuteReader())
{
if(dr.Read()) //加上if判断,能够更好的控制,也能防止 dt 为空,进而减少异常
{
dt.Load(dr);
}
return dt;
}
}
}
}
cmd.CommandType = CommandType.Text; ;
该为:
cn.Open(); //少了这行
所以会报错:ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
cmd = new SqlCommand(cmdtext, cn);
cmd.CommandType = CommandType.Text;
另外感觉这里有问题:
string sql = "select * from " + this.DropDownList2.SelectedValue ;
//这里的DropDownList2.SelectedValue ,得到的是 “08网工”、“08网设”、以及“09互联网”这样的值, 不知到你说的“表的名字是班的名字”中的“表的名字”是否对应于“08网工”、“08网设”、以及“09互联网”这样的值,
假如不对应的话,gridview控件应该是绑定不上数据的~~~~
帮你优化一下:
public static DataTable ReturnDataTable(string cmdtext)
{
DataTable dt = new DataTable();
string strConn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\WebSite1\App_Data\czm.mdf;Integrated Security=True;User Instance=True";
using(SqlConnection cn = new SqlConnection(strConn))
{
using(SqlCommand cmd = new SqlCommand(cmdtext,cn))
{
cn.Open();
using(SqlDataReader dr = cmd.ExecuteReader())
{
if(dr.Read()) //加上if判断,能够更好的控制,也能防止 dt 为空,进而减少异常
{
dt.Load(dr);
}
return dt;
}
}
}
}
更多追问追答
追问
我按照你的代码复制进去了,运行时候还是出错了,情况如下:
'08' 附近有语法错误。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: '08' 附近有语法错误。
源错误:
行 75: using (SqlDataReader dr = cmd.ExecuteReader())//这一句标示错误
追答
string sql = "select * from " + this.DropDownList2.SelectedValue ;
//这里的DropDownList2.SelectedValue ,得到的是 “08网工”、“08网设”、以及“09互联网”这样的值, 不知到你说的“【表的名字是班的名字】”中的“【表的名字】”
是否【对应】于“08网工”、“08网设”、以及“09互联网”这样的值,
假如不对应的话,gridview控件应该是绑定不上数据的~~~~
应该是 string sql = "select * from " + this.DropDownList2.SelectedValue ; //这行有问题,
导致调用方法ReturnDataTable()的 参数 sql 出现异常,进而你的cmd.ExecuteReader ()读取不到数据,
上面说了,//这里的DropDownList2.SelectedValue ,得到的是 “08网工”、“08网设”、以及“09互联网”这样的值,你要看看你数据表 的【表名】是否对应这样的表名,假如不对应,
cmd.ExecuteReader ()就不可能读取到数据,就会抛异常,
就会是“'08' 附近有语法错误”这样的异常~~~
【关键是DropDownList2.SelectedValue的值与数据表的【表名要对应】 】
展开全部
cn.open();
而且在你调用忘了以后要及时释放
cn.close();
而且在你调用忘了以后要及时释放
cn.close();
追问
具体应该放在哪里呢?我放在datatable后面依旧不行
追答
cn.close() 在return之前
提示语法错误那肯定就是你的sql语句有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-12-03
展开全部
多少自行车麦克米兰l
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询