首页 新闻 搜索 专区 学院

向数据库插入记录后button回发不能在当前页面即时显示

0
悬赏园豆:50 [已关闭问题]

以添加用户名为例:
首先,我用一个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>

自由飞的主页 自由飞 | 初学一级 | 园豆:174
提问于:2009-05-17 00:42
< >
分享
其他回答(2)
0

你需要做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调用前取得

Gray Zhang | 园豆:17610 (专家六级) | 2009-05-17 10:48
0

楼上的是正解

GWPBrian | 园豆:428 (菜鸟二级) | 2009-05-17 18:28
0

.你应该是在新增的事件中,增加一个绑定的动作。

DropDownList1.DataSource = ds;

DropDownList1.DataBind();

pageload中的事件是在你的新增事件之前触发的,所以你应该在你的新增动作后,再绑定一下。

邢少 | 园豆:10926 (专家六级) | 2009-05-18 11:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册