none
跨页面提交、局部刷新Gridview RRS feed

  • 问题

  • 请教大家:
    A.aspx里有个Gridview,绑定了dataset里的数据,在A.aspx里有个添加数据按钮,点击后弹出B.aspx,录入数据后提交时,只更新dataset(注意:并不是更新后台数据库),即通过dataset传值给A.aspx,同时更新Gridview(注意:只局部更新Gridview,不是更新整个A.aspx页面)。
    谢谢!
    悠悠自在的鱼
    2009年12月17日 15:04

答案

  • 你好,

    如果仅仅是需要添加数据,建议不要另开新页面可以稍微方便点。可以模拟AJAX控件中的ModalPopUp控件。
    你可以参考下面代码试试。在CSS方面需要你自己改变下。
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Import Namespace="System.Linq" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.Security" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.HtmlControls" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Web.UI.WebControls.WebParts" %>
    <%@ Import Namespace="System.Web.Services" %>
    <%@ Import Namespace="System.ComponentModel"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
        public DataTable GenerateDT
        {
            get
            {
                if (ViewState["ds"] != null)
                {
                    return (ViewState["ds"] as DataSet).Tables[0];
    
                }
                else
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("Id", typeof(string));
                    dt.Columns.Add("Test1", typeof(string));
                    dt.Columns.Add("Test2", typeof(string));
                    dt.Columns.Add("Test3", typeof(string));
                    dt.Columns.Add("UserName", typeof(string));
                    dt.Columns.Add("Password", typeof(string));
                    dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
                    DataRow dr1 = dt.NewRow();
                    dr1[0] = "1";
                    dr1[1] = "test2";
                    dr1[2] = "test3";
                    dr1[3] = "test3";
                    dr1[4] = "Name1";
                    dr1[5] = "";
                    dt.Rows.Add(dr1);
                    DataRow dr2 = dt.NewRow();
                    dr2[0] = "2";
                    dr2[1] = "test2";
                    dr2[2] = "test3";
                    dr2[3] = "test3";
                    dr2[4] = "Name2";
                    dr2[5] = "2";
                    dt.Rows.Add(dr2);
                    DataRow dr3 = dt.NewRow();
                    dr3[0] = "3";
                    dr3[1] = "test2";
                    dr3[2] = "test3";
                    dr3[3] = "test3";
                    dr3[4] = "Name2";
                    dr3[5] = "";
                    dt.Rows.Add(dr3);
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);
                    ViewState["ds"] = ds;
                    return dt;
    
                }
            }
            set { ViewState["ds"] = value; }
        }
    
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType==DataControlRowType.DataRow)
            {
    
              
            }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            this.GridView1.DataSource = this.GenerateDT;
            this.GridView1.DataBind();
            
        }
        protected void AddNewRow(object sender,EventArgs e)
        {
          DataTable dt = GenerateDT;
            string id = this.tbId.Text;
            string test1 = this.tbTest1.Text;
            string test2 = this.tbTest2.Text;
            string test3 = this.tbTest3.Text;
            string name = this.tbUnserName.Text;
            string password = this.tbPassword.Text;
          
            dt.Rows.Add(new object[] {id,test1,test2,test3,name,password });
            GenerateDT=dt;
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
            
            
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        
            <style type="text/css">
    .modalBackground {
    	background-color:Gray;
    	filter:alpha(opacity=70);
    	width:100%;
    	height:100%;
    	z-index:10000001;
    	text-align:center;	
    	position:absolute;
    	left:0px;
    	top:0px;
    	vertical-align:middle;
    	display: none;
    	
    }
    .center
    {
    	position:relative;
    	top:40%;
    	
    }
        </style>
        <script type="text/javascript" language="javascript">
            function showPanel() {
                var divForData = document.getElementById("divForData");
            
                divForData.style.display = "block";
                
    
            }
            function hiddenPanel() {
                var Panel1 = document.getElementById("divForData");
                Panel1.style.display = "none";
                Panel1.style.zIndex = -1;
            }
        </script>
    </head>
    <body style="height:100%">
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div style=" z-index:1;">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate > 
                <asp:GridView ID="GridView1" runat="server">
                    <Columns>
                        <asp:TemplateField>
                        <ItemTemplate>
                            <input id="Button1" type="button" value="button"  onclick="showPanel()"/>
                        </ItemTemplate>
                        </asp:TemplateField>                    
                    </Columns>
                </asp:GridView>           
              
        </div>
            </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        
             <div id="divForData" class="modalBackground">
               
                        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                        <table  style="vertical-align:middle; text-align:center; " align="center">
                        <tr><td>Id:</td><td> <asp:TextBox ID="tbId" runat="server"></asp:TextBox></td></tr>
                        <tr><td> Test1:</td><td> <asp:TextBox ID="tbTest1" runat="server"></asp:TextBox></td></tr>
                        <tr><td> Test2:</td><td><asp:TextBox ID="tbTest2" runat="server"></asp:TextBox><br /></td></tr>
                        <tr><td>Test3:</td><td> <asp:TextBox ID="tbTest3" runat="server"></asp:TextBox><br /></td></tr>
                        <tr><td>  UserName:</td><td> <asp:TextBox ID="tbUnserName" runat="server"></asp:TextBox></td></tr>
                        <tr><td> Password:</td><td>  <asp:TextBox ID="tbPassword" runat="server"></asp:TextBox></td></tr>
                        <tr><td><asp:Button ID="OkButton" runat="server" Text="OK" OnClick="AddNewRow" OnClientClick="hiddenPanel()" /></td>
                        <td> <asp:Button ID="CancelButton" runat="server" Text="Cancel" OnClientClick="hiddenPanel()" /></td></tr>
                       </table>
              </ContentTemplate>
                        <Triggers>
                        <asp:AsyncPostBackTrigger  ControlID="OkButton"/>
                        </Triggers>
                        </asp:UpdatePanel>    
                
          </div> 
        </form>
    </body>
    </html>
    

    Microsoft Online Community Support
    • 已标记为答案 KeFang Chen 2009年12月23日 6:19
    2009年12月21日 7:01

全部回复

  • 把A.aspx页面中的GridView放到UpdatePanel中,同时在页面中放一个Timer控件,定时请求服务器,在B.aspx页面成功保存数据到dataset中后,即可以在A.aspx页面中的GridView中显示出来。
    努力!奋斗
    2009年12月18日 2:43
  • a.html
    <form name="form1" method="post" action="">
    <a href="javascript:void(null)" class="add" onClick="open('b.html','','resizable=1,scrollbars=1,status=no,toolbar=no,menu=no,width=500,height=400,left=150,top=50')">增加</a>
    <input type="text" name="text1">
    </form>

    b.html
    <script language="javascript" type="text/javascript">
    function returnValue()
    {
    window.opener.document.all.text1.value=document.getElementById("returnText").value;
    window.close();
    }
    </script>
        <input type="button" name="Submit" value="提交" onclick="returnValue();">
        <input name="returnText" type="text" id="returnText">
    </p>


    。。。。。。。。。。
    2009年12月18日 8:01
  • 你好,

    如果仅仅是需要添加数据,建议不要另开新页面可以稍微方便点。可以模拟AJAX控件中的ModalPopUp控件。
    你可以参考下面代码试试。在CSS方面需要你自己改变下。
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Import Namespace="System.Linq" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.Security" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.HtmlControls" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Web.UI.WebControls.WebParts" %>
    <%@ Import Namespace="System.Web.Services" %>
    <%@ Import Namespace="System.ComponentModel"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
        public DataTable GenerateDT
        {
            get
            {
                if (ViewState["ds"] != null)
                {
                    return (ViewState["ds"] as DataSet).Tables[0];
    
                }
                else
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("Id", typeof(string));
                    dt.Columns.Add("Test1", typeof(string));
                    dt.Columns.Add("Test2", typeof(string));
                    dt.Columns.Add("Test3", typeof(string));
                    dt.Columns.Add("UserName", typeof(string));
                    dt.Columns.Add("Password", typeof(string));
                    dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
                    DataRow dr1 = dt.NewRow();
                    dr1[0] = "1";
                    dr1[1] = "test2";
                    dr1[2] = "test3";
                    dr1[3] = "test3";
                    dr1[4] = "Name1";
                    dr1[5] = "";
                    dt.Rows.Add(dr1);
                    DataRow dr2 = dt.NewRow();
                    dr2[0] = "2";
                    dr2[1] = "test2";
                    dr2[2] = "test3";
                    dr2[3] = "test3";
                    dr2[4] = "Name2";
                    dr2[5] = "2";
                    dt.Rows.Add(dr2);
                    DataRow dr3 = dt.NewRow();
                    dr3[0] = "3";
                    dr3[1] = "test2";
                    dr3[2] = "test3";
                    dr3[3] = "test3";
                    dr3[4] = "Name2";
                    dr3[5] = "";
                    dt.Rows.Add(dr3);
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);
                    ViewState["ds"] = ds;
                    return dt;
    
                }
            }
            set { ViewState["ds"] = value; }
        }
    
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType==DataControlRowType.DataRow)
            {
    
              
            }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            this.GridView1.DataSource = this.GenerateDT;
            this.GridView1.DataBind();
            
        }
        protected void AddNewRow(object sender,EventArgs e)
        {
          DataTable dt = GenerateDT;
            string id = this.tbId.Text;
            string test1 = this.tbTest1.Text;
            string test2 = this.tbTest2.Text;
            string test3 = this.tbTest3.Text;
            string name = this.tbUnserName.Text;
            string password = this.tbPassword.Text;
          
            dt.Rows.Add(new object[] {id,test1,test2,test3,name,password });
            GenerateDT=dt;
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
            
            
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        
            <style type="text/css">
    .modalBackground {
    	background-color:Gray;
    	filter:alpha(opacity=70);
    	width:100%;
    	height:100%;
    	z-index:10000001;
    	text-align:center;	
    	position:absolute;
    	left:0px;
    	top:0px;
    	vertical-align:middle;
    	display: none;
    	
    }
    .center
    {
    	position:relative;
    	top:40%;
    	
    }
        </style>
        <script type="text/javascript" language="javascript">
            function showPanel() {
                var divForData = document.getElementById("divForData");
            
                divForData.style.display = "block";
                
    
            }
            function hiddenPanel() {
                var Panel1 = document.getElementById("divForData");
                Panel1.style.display = "none";
                Panel1.style.zIndex = -1;
            }
        </script>
    </head>
    <body style="height:100%">
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div style=" z-index:1;">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate > 
                <asp:GridView ID="GridView1" runat="server">
                    <Columns>
                        <asp:TemplateField>
                        <ItemTemplate>
                            <input id="Button1" type="button" value="button"  onclick="showPanel()"/>
                        </ItemTemplate>
                        </asp:TemplateField>                    
                    </Columns>
                </asp:GridView>           
              
        </div>
            </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        
             <div id="divForData" class="modalBackground">
               
                        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                        <table  style="vertical-align:middle; text-align:center; " align="center">
                        <tr><td>Id:</td><td> <asp:TextBox ID="tbId" runat="server"></asp:TextBox></td></tr>
                        <tr><td> Test1:</td><td> <asp:TextBox ID="tbTest1" runat="server"></asp:TextBox></td></tr>
                        <tr><td> Test2:</td><td><asp:TextBox ID="tbTest2" runat="server"></asp:TextBox><br /></td></tr>
                        <tr><td>Test3:</td><td> <asp:TextBox ID="tbTest3" runat="server"></asp:TextBox><br /></td></tr>
                        <tr><td>  UserName:</td><td> <asp:TextBox ID="tbUnserName" runat="server"></asp:TextBox></td></tr>
                        <tr><td> Password:</td><td>  <asp:TextBox ID="tbPassword" runat="server"></asp:TextBox></td></tr>
                        <tr><td><asp:Button ID="OkButton" runat="server" Text="OK" OnClick="AddNewRow" OnClientClick="hiddenPanel()" /></td>
                        <td> <asp:Button ID="CancelButton" runat="server" Text="Cancel" OnClientClick="hiddenPanel()" /></td></tr>
                       </table>
              </ContentTemplate>
                        <Triggers>
                        <asp:AsyncPostBackTrigger  ControlID="OkButton"/>
                        </Triggers>
                        </asp:UpdatePanel>    
                
          </div> 
        </form>
    </body>
    </html>
    

    Microsoft Online Community Support
    • 已标记为答案 KeFang Chen 2009年12月23日 6:19
    2009年12月21日 7:01
  • 楼主要的明明是跨页面提交的答案。结果单页实现。

    楼主竞然认为是对的。

    请楼主下次提问把要求说清楚。别让人瞎操心。

    。。。。。。。。。。
    2009年12月24日 3:34
  • 本人没有确认,异怪中……


    悠悠自在的鱼
    2009年12月25日 2:40
  • 像这种捞油条的问题。再也不作解答了。
    。。。。。。。。。。
    2009年12月25日 3:19