ASP.NET―001:GridView绑定List、页面返回值具体实现

  用惯了WPF的绑定,ASP.NET的绑定貌似不是很好用。下面看看ASP.NET绑定的用法。一般来说可以直接绑定DataTable的,不过我觉得绑定List比较符合面向对象编程。

  绑定的方法是两句代码:

  

复制代码 代码如下:

  GridView名.DataSource = List<自定义类>;

  GridView名.DataBind();

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

  项目结构:

ASP.NET―001:GridView绑定List、页面返回值具体实现

  效果:

ASP.NET―001:GridView绑定List、页面返回值具体实现

  实体类

  

复制代码 代码如下:

  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>

  代码下载