当前位置:编程学习 > C#/ASP.NET >>

关于updatepanel中gridview刷新的问题

我在updatepanel中加入一个gridveiw,然后用一个modalpopup添加数据,然后重新绑定,但是gridview没有刷新,如果我再打开modalpopup添加一条数据提交后,gridview刷新为第一次添加数据后的数据列表,依次类推,也就说gridview的刷新总是延迟一步!这是怎么回事?请教!望高手解答! --------------------编程问答-------------------- modalpopup保存后得引发一下updatepanel的更新 --------------------编程问答-------------------- 触发事件的问题? --------------------编程问答-------------------- 这两个我都试了,还是不行!
后来我简化了一下,就是在updatepanel外执行插入数据然后更新列表,还是出现那样的问题!
我测试的代码是这样的
一个方法Bindgrid(string id)用来访问数据库(根据id查询数据),然后绑定到gridview控件
一个插入数据方法insert(string content,string pid)用来插入数据到数据库
一个updatepanel中包航gridview,updatepanel的属性为 UpdateMode="Conditional" ChildrenAsTriggers="false"
为了看是否刷新了updatepanel,我还在其中放置了一个label
在updatepanel外,放置一个“刷新”按钮,按钮的执行代码如下:
insert(“dddd”+DateTime.now.toString(),“3”);
label1.text = DateTime.now.toString();
Bindgrid(3);
updatepanel1.update();

其执行的结果还是第一次点击刷新按钮没有反应,第二次点击刷新按钮显示第一次的添加结果,依次类推!
但label1显示每次都刷新了updatepanel,不知道这是怎么回事? --------------------编程问答-------------------- 前台代码是:
<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
        <ContentTemplate>
            <table>
                <tr>
                    <td>
                        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /></td>
                </tr>
                <tr>
                    <td>
                        <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
                            <ContentTemplate>
                                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                                <asp:DataList ID="DataList2" runat="server" Width="100%">
                                    <ItemTemplate>
                                        <table width="100%">
                                            <tr>
                                                <td><%#Eval("Content") %></td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <table width="100%">
                                                        <tr>
                                                            <td>备注时间:<%#Eval("Date") %></td>
                                                            <td align="right">
                                                                <asp:Button runat="server" ID="BtnUpdate" Text="更改" />
                                                                <asp:Button runat="server" ID="BtnDelete" Text="删除" />
                                                            </td>
                                                        </tr>
                                                    </table>
                                                </td>
                                            </tr>
                                        </table>
                                    </ItemTemplate>
                                </asp:DataList>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                         
                    </td>
                </tr>
            </table>
        </ContentTemplate>
    </asp:UpdatePanel>
后台代码是:
private string STRCONN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("~/App_Data/data.mdb");

    DataSet GetTaskRemark(string id)
    {
        try
        {
            OleDbConnection conn = new OleDbConnection(STRCONN);
            string sql1 = "select *  from [TaskRemark] where TaskID=" + id;
            OleDbDataAdapter myAdapter = new OleDbDataAdapter(sql1, conn);
            DataSet ds = new DataSet();
            myAdapter.Fill(ds, "task");

            return ds;
        }
        catch (Exception ex)
        {
            return new DataSet();
        }
    }
    bool InsertRemark(string content, int taskID)
    {
        OleDbConnection conn = new OleDbConnection(STRCONN);
        if (conn.State != ConnectionState.Open)
            conn.Open();

        string strSql = "insert into [TaskRemark] ([Content],[Date],[TaskID]) values('" + content + "','" + DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss") + "'," + taskID.ToString() + ")";
        OleDbCommand cmd = new OleDbCommand(strSql, conn);
        int intRtn = cmd.ExecuteNonQuery();

        if (intRtn > 0)
            return true;
        else
            return false;
    }
    
    void BindRemark(string id)
    {
        DataSet data = GetTaskRemark(id);
        DataList2.DataSource = data;
        DataList2.DataBind();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindRemark("6");
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        InsertRemark("ddddddddd" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),6);
        BindRemark("6");
        Label1.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
        UpdatePanel3.Update();
    } --------------------编程问答-------------------- Bind --------------------编程问答-------------------- 楼上的能不能说明白点,“Bind”什么意思?你是说数据绑定有问题? --------------------编程问答-------------------- 在更新语句那里都放一个Bind 呀。。 --------------------编程问答-------------------- <Triggers>
            <asp:PostBackTrigger ControlID="Button1"/>
</Triggers>
需要加上触发回调这个updatepanel的空间的名称 --------------------编程问答-------------------- 尝试用DIV来实现此类功能看看。Jquey的插件有不少感觉差不式的东东 --------------------编程问答-------------------- 出现问题的原因可能是ChildrenAsTriggers这个属性。ChildrenAsTriggers属性有两个可选值,一个是false,一个是true。如果设为false,则说明此UpdatePanel不进行自动更新。但可以手动更新,如果设置为true,则这个UpdatePanel自动更新。 --------------------编程问答-------------------- gridview.databind()执行后,再updatepanel.update --------------------编程问答-------------------- Button1_Click()事件最后再加一行: BindRemark("6");
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,