GridView

From no name for this wiki
Jump to: navigation, search

Sample1

Ein Sample über das GridView Webcontrol, das in vielen Büchern fehlt.

  • Templating ohne die hässliche Eval funktion.
  • funktionierendes Paging
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
 
public partial class Default4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.GridView1.DataSource = this.CreateTable();
        this.GridView1.DataBind();
    }
 
    public void RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataRowView row  = (DataRowView) e.Row.DataItem;
            bool value = (bool) row["BooleanColumn"];
            Label myLabel = (Label) e.Row.FindControl("GridViewLabel");
            if (value)
            {
                myLabel.Text = "Ja";
            }
            else
            {
                myLabel.Text = "Nein";
            }
        }
 
    }
 
    protected void PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.GridView1.PageIndex = e.NewPageIndex;
        this.GridView1.DataBind();
    }
 
 
    private DataTable CreateTable()
    {
        DataTable table = new DataTable();
 
        DataColumn column;
        DataRow row;
 
        //First Column
        column = new DataColumn();
        column.DataType = typeof(Int32);
        column.ColumnName = "id";
        column.Unique = true;
        table.Columns.Add(column);
 
        //Second Column
        column = new DataColumn();
        column.DataType = typeof(bool);
        column.ColumnName = "BooleanColumn";                 
        table.Columns.Add(column);
 
        // Make the ID column the primary key column.
        DataColumn[] PrimaryKeyColumns = new DataColumn[1];
        PrimaryKeyColumns[0] = table.Columns["id"];
        table.PrimaryKey = PrimaryKeyColumns;
 
        for (int i = 0; i <= 200; i++)
        {
            row = table.NewRow();
            row["id"] = i;
            row["BooleanColumn"] = i%2 == 0 ? true : false;
            table.Rows.Add(row);
        }
        return table;
    }
}

und die Page

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>
 
<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" 
                      runat="server"  
                      AutoGenerateColumns="False"
                      onrowdatabound="RowDataBound" 
                      AllowPaging="true" 
                      PageSize="10"
                      PageIndex="1"
                      OnPageIndexChanging="PageIndexChanging">
 
        <Columns>
 
            <asp:BoundField ReadOnly="true" HeaderText="The ominous id" DataField="id"/>
 
            <asp:TemplateField HeaderText="Ansehen" >
                <ItemTemplate>
                    <asp:Label ID="GridViewLabel" runat="server" Text="Label"/>                   
                </ItemTemplate>
            </asp:TemplateField>   
 
        </Columns>         
 
        </asp:GridView>
    </div>
    </form>
</body>
</html>

Sample 2

Paging mit ObjectDataSource. Nur die angezeigten Daten werden materialisiert!:

using System;
using System.Data;
 
namespace Business
{
    public class Logic
    {
        public DataTable SelectMethod(int maximumRows, int startRowIndex)
        {
            return this.CreateTable(maximumRows, startRowIndex);
        }
 
        public int Count()
        {
            return 100;
        }
 
        private DataTable CreateTable(int maximumRows, int startRowIndex)
        {
            DataTable table = new DataTable();
 
            DataColumn column;
            DataRow row;
 
            //First Column
            column = new DataColumn();
            column.DataType = typeof(Int32);
            column.ColumnName = "id";
            column.Unique = true;
            table.Columns.Add(column);
 
            //Second Column
            column = new DataColumn();
            column.DataType = typeof(bool);
            column.ColumnName = "BooleanColumn";
            table.Columns.Add(column);
 
            // Make the ID column the primary key column.
            DataColumn[] PrimaryKeyColumns = new DataColumn[1];
            PrimaryKeyColumns[0] = table.Columns["id"];
            table.PrimaryKey = PrimaryKeyColumns;
 
            for (int i = 0; i < maximumRows; i++)
            {
                row = table.NewRow();
                row["id"] = i + startRowIndex + 1;
                row["BooleanColumn"] = i % 2 == 0 ? true : false;
                table.Rows.Add(row);
            }
            return table;
        }
    }
}

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Pagination._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>
    <form id="form1" runat="server">
    <div>
        <asp:ObjectDataSource ID="ObjectDataSource1" 
                              runat="server"
                              SelectMethod="SelectMethod"
                              TypeName="Business.Logic"
                              EnablePaging="True"
                              SelectCountMethod="Count"/>
        <asp:GridView ID="GridView1" 
                      runat="server"
                      DataSourceID="ObjectDataSource1"
                      AllowPaging="true"
                      PageIndex="0"
                      PageSize="10">
        </asp:GridView>
    </div>
    </form>
</body>
</html>