视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ASP.NET―001:GridView绑定List、页面返回值具体实现
2020-11-27 22:39:13 责编:小采
文档

用惯了WPF的绑定,ASP.NET的绑定貌似不是很好用。下面看看ASP.NET绑定的用法。一般来说可以直接绑定DataTable的,不过我觉得绑定List比较符合面向对象编程。
绑定的方法是两句代码:
代码如下:
GridView名.DataSource = List<自定义类>; 

GridView名.DataBind(); 

直接看例子吧,以下是一个绑定一个PersonModel类的例子。其中用到了页面返回参数,使用js传递,js可写在前端也可直接写在后台代码里。
项目结构:

效果:

实体类
代码如下:
public class PersonModel
    {
        private int personIndex;


        public int PersonIndex
        {
            get { return personIndex; }


            set { personIndex = value; }
        }


        private string personID;


        public string PersonID
        {
            get { return personID; }


            set { personID = value; }
        }


        private string personName;


        public string PersonName
        {
            get { return personName; }


            set { personName = value; }
        }


        private string personSex;


        public string PersonSex
        {
            get { return personSex; }


            set { personSex = value; }
        }


        private int personAge;


        public int PersonAge
        {
            get { return personAge; }


            set { personAge = value; }
        }


        private bool personSelected = false;


        public bool PersonSelected
        {
            get { return personSelected; }


            set { personSelected = value; }
        }
    }

针对绑定的aspx页面写一个管理类,用于操作数据
代码如下:
public class ChildFrmManager
    {
        private List<PersonModel> personCollect = new List<PersonModel>();


        private static ChildFrmManager instance = null;


        public List<PersonModel> PersonCollect
        {
            get { return personCollect; }


            set { personCollect = value; }
        }


        public static ChildFrmManager DoGetInstance()
        {
            if (instance == null)
            {
                instance = new ChildFrmManager();
            }


            return instance;
        }


        public void DoAddPersons()
        {
            for (int i = 0; i < 20; i++)
            {
                PersonModel model = new PersonModel();


                model.PersonIndex = i + 1;


                model.PersonID = System.Guid.NewGuid().ToString();


                model.PersonName = "测试" + i;


                model.PersonAge = 27 + i;


                model.PersonSex = i % 2 == 0 ? "男" : "女";


                model.PersonSelected = false;


                this.PersonCollect.Add(model);
            }
        }
    }

绑定的页面前端
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ChildFrm.aspx.cs" Inherits="ASPNetGridView.Pages.ChildFrm" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<<body id="MyBody" runat="server" ms_positioning="GridLayout">
    <form id="Form1" runat="server" method="post">
    <div>
    <asp:GridView ID="dgPersons" runat="server" AutoGenerateColumns="False"
     EnableViewState="false"
    CellPadding="4"  ForeColor="#333333" DataKeyNames="PersonID"
     OnSelectedIndexChanged="Selcted_Click">
     <Columns>
       <asp:CommandField ShowSelectButton="True" /> 
       <asp:BoundField DataField="PersonIndex" HeaderText="序号"/>
       <asp:TemplateField>
       <ItemTemplate>
       <input id="radiobutton1" name="pselect" type="radio" />
       </ItemTemplate>
       </asp:TemplateField>
       <asp:BoundField DataField="PersonName" HeaderText="姓名" />
       <asp:BoundField DataField="PersonAge" HeaderText="年龄" />
       <asp:BoundField DataField="PersonSex" HeaderText="性别" />
     </Columns>
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <EditRowStyle BackColor="#999999" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />

    </asp:GridView>
    </div>
    </form>
</body>
</html>

绑定页面后台
代码如下:
 public partial class ChildFrm : System.Web.UI.Page
    {
        private ChildFrmManager dManager = null;


        protected PersonModel selectItem = null;


        protected void Page_Load(object sender, EventArgs e)
        {
            dManager = ChildFrmManager.DoGetInstance();


            if (!IsPostBack)
            {
                dManager.DoAddPersons();


                this.dgPersons.DataSource = dManager.PersonCollect;


                this.dgPersons.DataBind();
            }
        }


        protected void Selcted_Click(object sender, EventArgs e)
        {
            int selectIndex = this.dgPersons.SelectedIndex;


            foreach (PersonModel mitem in dManager.PersonCollect)
            {
                if (mitem.PersonIndex - 1 == selectIndex)
                {
                    mitem.PersonSelected = true;
                }
                else
                {
                    mitem.PersonSelected = false;
                }
            }


            selectItem = dManager.PersonCollect[selectIndex];


            string vbCrLf = " ";


            string strScript = "<script>" + vbCrLf;


            strScript += "window.parent.returnValue='" + selectItem.PersonName + "';" + vbCrLf;


            strScript += "window.parent.close();" + vbCrLf;


            strScript += "</script>" + vbCrLf;


            if (!IsClientScriptBlockRegistered("clientScript"))
            {
                RegisterClientScriptBlock("clientScript", strScript);
            }
        }
    }

承载绑定页面的页面
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FrameFrm.aspx.cs" Inherits="ASPNetGridView.Pages.FrameFrm" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<frameset rows="0,*">
    <frame src="about:blank">
    <frame src="ChildFrm.aspx">
  </frameset>
</html>

主页面,获取返回值的js在前端
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ASPNetGridView._Default" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div align="center">
        <form id="Form1" runat="server" method="post">
            <table runat="server">
              <tr>
                  <td>
                  <asp:Label ID="Label1" runat="server" Font-Bold="true">选择结果</asp:Label>
                  </td>


                  <td>
                  <asp:TextBox ID="txtShowReturnValue" runat="server" Width="100px" />
                  </td>
                  <td>
                  <asp:Button ID="btnOpenNewFrm" runat="server" Text="选择" Width="60px" OnClientClick="OpenNewWindow()"/>
                  </td>
              </tr>
            </table>
        </form>
    </div>
</body>
<script type ='text/javascript'>
    function OpenNewWindow() {


        var str = window.showModalDialog('Pages/FrameFrm.aspx', document.Form1.txtShowReturnValue.value, 'dialogWidth=1000px;dialogHeight=900px', 'scroll:yes');


        if (str != null)
        { document.Form1.txtShowReturnValue.value = str; }
    }
</script>
</html>

代码下载

下载本文
显示全文
专题