以添加用户名为例:
首先,我用一个ListBox控件,通过DataSource数据源控件绑定,显示一个数据库中的用户名列表;然后,我在页面中用一个textbox接受添加的用户名,用button提交,button_click事件里调用方法将textbox里的用户名insert数据库。
但是,点击button后,数据能插入数据库,但回发的页面却不能显示新增的用户名。
我猜是因为回发或页面生命周期的原因,比如是不是postback就会跳过某几个页面事件,而数据绑定就发生在被跳过的页面事件里;或者viewstate加载在数据绑定之后,将控件重新改回了postback之前的状态(我试过禁用viewstate,好像也没什么变化)。
但没查到具体说明的资料,无法确定,望大侠指点。能再给点学习的链接更好。
ps:我在page_load事件里用databind()方法将数据绑定到dropdownlist控件里就会取不到selectedvalue,但用Items.Add()就能行,不知道是不是和这个问题一样的原因?
代码:
后台:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string[] names ={"tanye","tanchao"};
//会出问题,取不到值
//DropDownList1.DataSource = names;
//DropDownList1.DataBind();
if (!IsPostBack)
{
for(int i=0;i<names.Length;i++)
DropDownList1.Items.Add(names[i]);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string _strConn = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["usersConnectionString"].ConnectionString;
SqlConnection sqlConn = new SqlConnection(_strConn);
SqlCommand sqlComm = new SqlCommand("insert username values('"+TextBox1.Text+"')", sqlConn);
sqlConn.Open();
sqlComm.ExecuteNonQuery();
//dr.Read();
sqlComm.Dispose();
sqlConn.Close();
Response.Write(DropDownList1.SelectedValue);
}
前台:
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1" runat="server" DataSourceID="SqlDataSource1" DataTextField="users"
DataValueField="users"></asp:ListBox><asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:usersConnectionString %>" SelectCommand="SELECT [users] FROM [username]">
</asp:SqlDataSource>
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><br />
<br />
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList><br />
</div>
</form>
</body>
你需要做2件事:
1、在Page_Load中的DataBind加到对IsPostBack的判断里,即
if (!IsPostBack) { DropDownList1.DataSource = ds; DropDownList1.DataBind(); }
2、在Button1_Click的最后加入DataBind,即
protected void Button1_Click(object sender, EventArgs e) {
//你的代码
DropDownList1.DataSource = ds;
DropDownList1.DataBind();
}
注意你如果要取SelectedValue,就必须在DropDownList1的DataBind调用前取得
楼上的是正解
.你应该是在新增的事件中,增加一个绑定的动作。
DropDownList1.DataSource = ds;
DropDownList1.DataBind();
pageload中的事件是在你的新增事件之前触发的,所以你应该在你的新增动作后,再绑定一下。