我是asp.net 初学的。 将dropDownList 控件与SqlDateReader绑定后。 发现在提交时的按钮click事件中,用dropDownList.SelectedValue取出的值 总是初化参数。
这是为什么呢?
大概如下 :<asp:dropdownlist ID="lstChannel" runat="server" DataTextField="Tname" DataValueField="id"/>
---------------------------------------------------------------------------
SqlConn1.Open();
SqlCmd1=new SqlCommand("Select * from Cchannel",SqlConn1);
Reader1=SqlCmd1.ExecuteReader();
lstChannel.DataBind();
lstChannel.DataSource=Reader1;
void btmCmdOK_Click(object sender , EventArgs e) //------------OK按钮——
{
Response.Write(lstChannel.SelectedValue); //这里无论网页上怎么选,都是输出初始
//不知道为什么。}
{
if (!
SqlConn1.Open();
SqlCmd1=new SqlCommand("Select * from Cchannel",SqlConn1);
Reader1=SqlCmd1.ExecuteReader();
lstChannel.DataBind();
lstChannel.DataSource=Reader1;
}
{
// 一定要加这个条件来判断一下.
if (! IsPostBack )
{
SqlConn1.Open();
SqlCmd1=new SqlCommand("Select * from Cchannel",SqlConn1);
Reader1=SqlCmd1.ExecuteReader();
lstChannel.DataBind();
lstChannel.DataSource=Reader1;
}
}
{
SqlConn1.Open();
SqlCmd1=new SqlCommand("Select * from Cchannel",SqlConn1);
Reader1=SqlCmd1.ExecuteReader();
lstChannel.DataSource=Reader1; // 这里应该先指定数据源
lstChannel.DataBind(); //然后在绑定
}
if (! IsPostBack )
{
DisplayFlowName(DropDownList控件名称);
}
public void DisplayFlowName(DropDownList ddlstTemp)
{
//建立内存表
DataTable dt=new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("FlowID", typeof(string)));
dt.Columns.Add(new DataColumn("FlowName",typeof(string)));
strSql="select FlowID,FlowName from FlowName;
SqlDataReader sdrDr=GetSqlDataReader(strSql);
while(sdrDr.Read())
{
dr=dt.NewRow();
dr[0]=sdrDr.GetString(0).Trim();
dr[1]=sdrDr.GetString(1).Trim();
dt.Rows.Add(dr);
}
ddlstTemp.Items.Clear();
ddlstTemp.DataSource=dt;
ddlstTemp.DataTextField="FlowName";
ddlstTemp.DataValueField="FlowID";
ddlstTemp.DataBind();
CloseDataBase();//关闭
}
//自定义方法
public SqlDataReader GetSqlDataReader(string strSql)
{
/* 1、编写:
* 2、功能:通过SQL语句显示显示其他相关的信息
* 3、参数:SQL语句
* 4、返回值: SqlDataReader
*/
SqlDataReader sdrEoa;
OpenDataBase();//打开数据库
SqlCommand cmdTemp;
cmdTemp=new SqlCommand(strSql,conn);
sdrEoa=cmdTemp.ExecuteReader();
return sdrEoa;
}
lstChannel.DataBind(); 在绑定
且要注意页面的初始载入的影响,它有可能让SelectedIndex的值恢复为默认的值
你可以用断点的调试方法(这方法很管用)找出错误在哪。
</asp:DropDownList>
后台:
public ArrayList FristCensorResult(object popo)
{
SqlDataReader sdrEoa;
OpenDataBase();//打开数据库
SqlCommand cmdTemp;
cmdTemp=new SqlCommand(strSql,conn);
sdrEoa=cmdTemp.ExecuteReader();
return sdrEoa;
}
Reader1=SqlCmd1.ExecuteReader();lstChannel.DataSource=Reader1;
lstChannel.DataBind();
先指定数据源再帮定
if(!IsPostBack)
{}