久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ASP.NET數(shù)據(jù)表現(xiàn)控件一些比較常見問題集合

 悟靜 2012-01-30

1. GridView控件

1.1 在不使用數(shù)據(jù)源控件時(shí),,GridView控件的排序和分頁

1.2 如何顯示空的GridView控件,?

1.3 GridView的大小溢出

1.4 在GridView控件中使用CheckBox控件

1.5 綁定自定義頁面模板

1.6 如何訪問頁碼按鈕,并改變其樣式,?

1.7 如何導(dǎo)出GridView到Excel文件,?

1.8 如何在e-mail信息中發(fā)送GridView數(shù)據(jù)?

 

2. DataList控件

2.1 水平地呈現(xiàn)數(shù)據(jù)

2.2 DataList控件的分頁

 

3.  DetailsView控件

3.1 主/詳細(xì)場(chǎng)景

 

4. 常見問題

4.1 如何在數(shù)據(jù)呈現(xiàn)控件中動(dòng)態(tài)創(chuàng)建列,?

4.2 連接字符串的設(shè)置

4.3 如何在GridView或DataGrid中顯示固定寬度的列,?

4.4 何時(shí)使用GridView/DataGrid/DataList/Repeater控件?

1. GridView控件

  

1.1在不使用數(shù)據(jù)源控件時(shí),,GridView控件的排序和分頁 

 

有時(shí)你想在不使用數(shù)據(jù)源控件如SqlDataSourceObjectDataSource 控件的情況下綁定GridView控件到數(shù)據(jù),,這意味著排序和分頁將不會(huì)借助數(shù)據(jù)源控件被自動(dòng)處理,為了實(shí)現(xiàn)排序和分頁,,你必須要處理GridView 控件的PageIndexChanging Sorting事件,,如下例所示:

  

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.DataSource = SortDataTable(GetYourDataSource(), true);
    GridView1.PageIndex = e.NewPageIndex;
    GridView1.DataBind();
}
 
private string GridViewSortDirection
{
    get { return ViewState["SortDirection"] as string  "ASC"; }
    set { ViewState["SortDirection"] = value; }
}
 
private string GridViewSortExpression
{
    get { return ViewState["SortExpression"] as string  string.Empty; }
    set { ViewState["SortExpression"] = value; }
}
 
private string ToggleSortDirection()
{
    switch (GridViewSortDirection)
   {
      case "ASC":
            GridViewSortDirection = "DESC";
          break;
      case "DESC":
            GridViewSortDirection = "ASC";
          break;
   }
    return GridViewSortDirection;
}
 
protected DataView SortDataTable(DataTable dataTable, bool isPageIndexChanging)
{
    if (dataTable != null)
   {
        DataView dataView = new DataView(dataTable);
        if (GridViewSortExpression != string.Empty)
       {
            if (isPageIndexChanging)
           {
                dataView.Sort = string.Format("{0} {1}", 
                              GridViewSortExpression,GridViewSortDirection);
           }
           else
           {
                dataView.Sort = string.Format("{0} {1}",
                              GridViewSortExpression,ToggleSortDirection());
           }
       }
    return dataView;
   }
   else
   {
        return new DataView();
   }
}
 
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    GridViewSortExpression = e.SortExpression;
    int pageIndex = GridView1.PageIndex;
    GridView1.DataSource = SortDataTable(GetYourDataSource(), false);
    GridView1.PageIndex = pageIndex;
    GridView1.DataBind();
}

1.2 如何顯示空的GridView控件? 

 

當(dāng)GridView中沒有數(shù)據(jù)要顯示時(shí),,默認(rèn)情況控件將不被顯示,。如果你想即便在沒有數(shù)據(jù)時(shí)也顯示標(biāo)題行,你可以創(chuàng)建一個(gè)臨時(shí)的包含空記錄的DataTable對(duì)象,,接著在頁面的Init事件中綁定該GridView控件到這個(gè)DataTable,。下例說明了如何去做,。

 

protected void GridView1_Init(Object sender, EventArgs e)

{

    DataTable dt = new DataTable();

    dt.Columns.Add("Column1");

    dt.Columns.Add("Column2");

    DataRow dr = dt.NewRow();

    dr["Column1"] = "";

    dr["Column2"] = "";

    dt.Rows.Add(dr);

    GridView1.DataSource = dt;

    GridView1.DataBind();

  }

 

另一種解決方法是從GridView繼承并重寫CreateChildControls方法,,該方法能自動(dòng)利用現(xiàn)有列布局,,并移除使用外在DataTable對(duì)象的需求。下例說明了如何去做,。

 

public class EmptyGridView : GridView

{

    #region Properties

    /// <summary>

    /// Enable or Disable generating an empty table if no data rows in source

    /// </summary>

    [

    Description("Enable or disable generating an empty table with headers

         when no data rows are available in the data source."),

    Category("Misc"),

    DefaultValue("true"),

    ]

    public bool ShowEmptyTable

    {

        get

        {

            object o = ViewState["ShowEmptyTable"];

            return (o != null (bool)o : true);

        }

        set

        {

            ViewState["ShowEmptyTable"] = value;

        }

    }

    /// <summary>

    /// Get or Set Text to display in empty data row

    /// </summary>

    [

    Description("Text to display in the empty data row."),

    Category("Misc"),

    DefaultValue(""),

    ]

    public string EmptyTableRowText

    {

        get

        {

            object o = ViewState["EmptyTableRowText"];

            return (o != null o.ToString() : "");

        }

        set

        {

            ViewState["EmptyTableRowText"] = value;

        }

    }

    #endregion

    protected override int CreateChildControls(System.Collections.IEnumerable

            dataSource, bool dataBinding)

    {

        int numRows = base.CreateChildControls(dataSource, dataBinding);

        // No data rows created, so create an empty table if enabled.

        if (numRows == 0 && ShowEmptyTable)

        {

            //create table

            Table table = new Table();

            table.ID = this.ID;

            //create a new header row

            GridViewRow row = base.CreateRow(-1, -1, DataControlRowType.Header,

                DataControlRowState.Normal);

            //convert the exisiting columns into an array and initialize

            DataControlField[] fields = new

                DataControlField[this.Columns.Count];

            this.Columns.CopyTo(fields, 0);

            this.InitializeRow(row, fields);

            table.Rows.Add(row);

            //create the empty row

            row = new GridViewRow(-1, -1, DataControlRowType.DataRow,

            DataControlRowState.Normal);

            TableCell cell = new TableCell();

            cell.ColumnSpan = this.Columns.Count;

            cell.Width = Unit.Percentage(100);

            cell.Controls.Add(new LiteralControl(EmptyTableRowText));

            row.Cells.Add(cell);

            table.Rows.Add(row);

            this.Controls.Add(table);

        }

        return numRows;

    }

}

 

1.3 GridView的大小溢出 

 

如果GridView控件試圖顯示超過頁面可提供空間的列或行時(shí),,這將引起GridView控件溢出并改變整個(gè)頁面的外觀,你可以通過添加水平或垂直滾動(dòng)條到該控件去解決這個(gè)問題,,如下例所示:

 

<div style="vertical-align:top; height:200px; width:100%; overflow:auto;">

1.4 Gridview控件中使用CheckBox控件

 

在基于webe-mail客戶端,,如Hotmail Yahoo,一個(gè)包含check boxes的列可用于選擇單個(gè)e-mail信息,,當(dāng)前Gridview控件并沒有提供對(duì)此的內(nèi)置支持,,但你自己可以實(shí)現(xiàn)它。關(guān)于如何擴(kuò)展Gridview控件去實(shí)現(xiàn)check boxes的例子,,請(qǐng)參見此論壇http://msdn.microsoft.com/en-us/magazine/cc163612.ASPx,。

 

1.5 綁定自定義頁面模板 

  

要在頁腳顯示如總頁數(shù)的信息,你可以用<PagerTemplate>項(xiàng),,如下例所示:

 

<ASP:GridView ID="GridView1" runat="server"

    DataSourceID="SqlDataSource1"

    DataKeyNames="ID"

    AllowPaging="true"

    PageSize="10"

    AutoGenerateColumns="true">

  <PagerTemplate>

    <asp:Label ID="LabelCurrentPage" runat="server"

        Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>">

    </asp:Label>/

    <asp:Label ID="LabelPageCount" runat="server"

       Text="<%# ((GridView)Container.NamingContainer).PageCount %>">

    </asp:Label> 

    <asp:LinkButton ID="LinkButtonFirstPage" runat="server"

        CommandArgument="First"

        CommandName="Page"

        enabled="<%# ((GridView)Container.NamingContainer).PageIndex != 0

             %>"><<

    asp:LinkButton ID="LinkButtonPreviousPage" runat="server"

        CommandArgument="Prev" CommandName="Page"

        enabled="<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>"><

    </asp:LinkButton>

    <asp:LinkButton ID="LinkButtonNextPage" runat="server"

        CommandArgument="Next"

        CommandName="Page"

        enabled="<%# ((GridView)Container.NamingContainer).PageIndex !=

            ((GridView)Container.NamingContainer).PageCount - 1 %>">>

    </asp:LinkButton>

    <asp:LinkButton ID="LinkButtonLastPage" runat="server"

        CommandArgument="Last"

        CommandName="Page"

        enabled="<%# ((GridView)Container.NamingContainer).PageIndex !=

         ((GridView)Container.NamingContainer).PageCount - 1 %>">>>

    </asp:LinkButton>

  </PagerTemplate>

</asp:GridView>

1.6 如何訪問頁碼按鈕,,并改變其樣式?

 

要自定義選中的頁碼,,使其有更大的字體或不同的顏色,,需處理GridView控件的RowDataBound事件,并編程性地應(yīng)用格式,。接下來的例子演示了如何去做,。

 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)  

{  

    if (e.Row.RowType == DataControlRowType.Pager)  

    {  

        TableRow row = e.Row.Controls[0].Controls[0].Controls[0] as TableRow;

        foreach (TableCell cell in row.Cells)  

        {  

            Control lb = cell.Controls[0] ;  

            if (lb is Label)  

            {                              

                ((Label)lb).ForeColor = System.Drawing.Color.Red;  

                ((Label)lb).Font.Size = new FontUnit("40px");

            }  

            else if (lb is LinkButton)  

            {                       

                 //Here is for changing the rest LinkButton page number.

            }  

        }

    }  

}

    

  

1.7 如何導(dǎo)出gridviewExcel文件?

 

如何導(dǎo)出Gridview數(shù)據(jù)到Excel文件,,請(qǐng)遵循這些步驟:

1.  在包含GridView的頁面中,,重寫VerifyRenderingInServerForm方法。這讓你編程地呈現(xiàn)GridView控件而不用呈現(xiàn)完整的頁面,。這個(gè)方法的默認(rèn)執(zhí)行阻止你單獨(dú)的呈現(xiàn)GridView控件,。 

2.  確保GridView控件位于包含runat="server"屬性的form元素中。

 

下面的例子演示了為了呈現(xiàn)GridView 控件為Excel電子表格的必須代碼,。

 

protected void Button1_Click(object sender, System.EventArgs e)

{

    // Clear the response.

    Response.Clear();

    // Set the type and file.name.

    Response.AddHeader("content-disposition",

        "attachment;filename=FileName.xls");

    Response.Charset = "";

    Response.ContentType = "application/vnd.xls";

    // Add the HTML from the GridView control to a StringWriter instance so you

    // can write it out later.

    System.IO.StringWriter sw = new System.IO.StringWriter();

    System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);

    GridView1.RenderControl(hw);

    // Write the data.

    Response.Write(sw.ToString);

    Response.End();

}

pupublic override void VerifyRenderingInServerForm(Control control)

{

}

1.8 如何在e-mail信息中發(fā)送Gridview數(shù)據(jù),?

 

你可以作為e-mail信息的一部分發(fā)送顯示在Gridview中的數(shù)據(jù)。這種技術(shù)類似于你如何輸出Gridview數(shù)據(jù)到Excel文件(你從Gridview控件得到展現(xiàn)標(biāo)記,,并添加到e-mail消息中),。確保e-mail消息是HTML格式。下面例子演示了如何去做(這個(gè)例子假設(shè)應(yīng)用程序已經(jīng)被配置為發(fā)送e-mail),。

 

using System.IO;

using System.Text;

using System.Net.Mail;

private string GridViewToHtml(GridView gv)

{

    StringBuilder sb = new StringBuilder();

    StringWriter sw = new StringWriter(sb);

    HtmlTextWriter hw = new HtmlTextWriter(sw);

    gv.RenderControl(hw);

    return sb.ToString();

}

protected void SendMailButton_Click(object sender, EventArgs e)

{

    MailMessage mail = new MailMessage();

    mail.Body = GridViewToHtml(GridView1);

    mail.IsBodyHtml = true;

    // ...   

}

public override void VerifyRenderingInServerForm(Control control)

{

}

2. DataList 控件 

 

2.1 水平地呈現(xiàn)數(shù)據(jù) 

 

Gridview控件一行接一行地顯示數(shù)據(jù),,這意味著布局是垂直的,。要以其它的布局呈現(xiàn)數(shù)據(jù),Datalist控件是個(gè)好的選擇,。例如,,他可以通過設(shè)置RepeatDirection="Horizontal"水平地顯示數(shù)據(jù)。你同樣可以使用Repeatcolumns屬性去控制在每一行顯示多少列,。

 

 

2.2 DataList控件的分頁

 

不同于Gridview控件,,Datalist控件沒有自動(dòng)分頁支持。要支持分頁功能,,你必須添加代碼,,如下例所示:

 

int PageSize, RecordCount, PageCount, CurrentPage;

SqlConnection MyConn;

public int IndexOfPage

{

    get { return (int)ViewState["_IndexOfPage"]; }

    set { ViewState["_IndexOfPage "] = value; }

}

public int CountOfPage

{

    get { return (int)ViewState["_CountOfPage"]; }

    set { ViewState["_CountOfPage"] = value; }

}

public void Page_Load(Object src, EventArgs e)

{

    PageSize = 3;

    string MyConnString =

     @"Server=(local)\SQLEXPRESS;Integrated Security=SSPI;Database=test;Persist Security Info=True";

    MyConn = new SqlConnection(MyConnString);

    MyConn.Open();

    if (!Page.IsPostBack)

    {

        ListBind();

        CurrentPage = 0;

        IndexOfPage = 0;

        RecordCount = CalculateRecord();

        lblRecordCount.Text = RecordCount.ToString();

        PageCount = RecordCount / PageSize;

        lblPageCount.Text = PageCount.ToString();

        CountOfPage = PageCount;

    }

} 

public int CalculateRecord()

{

    int intCount;

    string strCount = "select count(*) as co from student";

    SqlCommand MyComm = new SqlCommand(strCount, MyConn);

    SqlDataReader dr = MyComm.ExecuteReader();

    if (dr.Read())

    {

        intCount = Int32.Parse(dr["co"].ToString());

    }

    else

    {

        intCount = 0;

    }

    dr.Close();

    return intCount;

}

ICollection CreateSource()

{

    int StartIndex;

    StartIndex = CurrentPage * PageSize;

    string strSel = "select * from student";

    DataSet ds = new DataSet();

    SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel, MyConn);

    MyAdapter.Fill(ds, StartIndex, PageSize, "Score");

    return ds.Tables["Score"].DefaultView;

}

public void ListBind()

{

    DataList1.DataSource = CreateSource();

    DataList1.DataBind();

    lbnNextPage.Enabled = true;

    lbnPrevPage.Enabled = true;

    if (CurrentPage == (PageCount - 1)) lbnNextPage.Enabled = false;

    if (CurrentPage == 0) lbnPrevPage.Enabled = false;

    lblCurrentPage.Text = (CurrentPage + 1).ToString();

}

public void Page_OnClick(Object sender, CommandEventArgs e)

{

    CurrentPage = (int)IndexOfPage;

    PageCount = (int)CountOfPage;

    string cmd = e.CommandName;

    switch (cmd)

    {

        case "next":

            if (CurrentPage < (PageCount - 1)) CurrentPage++;

            break;

        case "prev":

            if (CurrentPage > 0) CurrentPage--;

            break;

    }

    IndexPage = CurrentPage;

    ListBind();

}

3. DetailsView 控件

 

3.1/詳細(xì)情況 

 

如果你想在Griview控件中顯示所有記錄,并且希望能夠顯示一條記錄的細(xì)則,。你需要使用另一個(gè)顯示控件,。一種方發(fā)是在Gridview控件中添加一個(gè)Select按鈕列去顯示選擇的數(shù)據(jù)記錄,你通常為此使用Detailsview控件,。更多信息,,參見ASP.NET 網(wǎng)站上的Master-Details

 

 

4. 常見問題

 

4.1 如何在數(shù)據(jù)呈現(xiàn)控件中動(dòng)態(tài)創(chuàng)建列,? 

 

當(dāng)你不確定你應(yīng)該添加多少列到Gridview控件時(shí),,你可以使用自定義模板控件動(dòng)態(tài)創(chuàng)建列,如下例所示:

 

protected void Page_Load(object sender, EventArgs e)

{

        if (!IsPostBack)

        {

            TemplateField customField1 = new TemplateField();

            customField1.ShowHeader = true;

            customField1.HeaderTemplate =

                new GridViewTemplate(DataControlRowType.Header, "ID", "");

            customField1.ItemTemplate =

                new GridViewTemplate(DataControlRowType.DataRow, "", "Contract");

            GridView1.Columns.Add(customField1);

            GridView1.DataSource = GetDataSource();

            GridView1.DataBind();

        }

}

 

public class GridViewTemplate : ITemplate

{

    private DataControlRowType templateType;

    private string columnName;

    private string columnNameBinding;

    public GridViewTemplate(DataControlRowType type, string colname,

        string colNameBinding)

    {

        templateType = type;

        columnName = colname;

        columnNameBinding = colNameBinding;

    }

    public void InstantiateIn( System.Web.UI.Control container )

    {

        switch (templateType)

        {

            case DataControlRowType.Header:

                Literal lc = new Literal();

                lc.Text = columnName;         

                container.Controls.Add(lc);         

                break;

            case DataControlRowType.DataRow:

                CheckBox cb = new CheckBox();

                cb.ID = "cb1";

                cb.DataBinding += new EventHandler(this.cb_OnDataBinding); 

                container.Controls.Add(cb);

                break;

            default:

                break;

        }

    }

    public void cb_OnDataBinding(object sender, EventArgs e)

   {

        CheckBox cb = (CheckBox)sender;

        GridViewRow container = (GridViewRow)cb.NamingContainer;

        cb.Checked = Convert.ToBoolean(

            ((DataRowView)container.DataItem)[columnNameBinding].ToString());

    }

}

4.2 連接字符串的設(shè)置 

 

你可以在Web.config文件中或在代碼中配置連接字符串,,更多信息參見ASP.NET網(wǎng)站Connection Strings Configuration,。

 

 

4.3 如何在GridViewDataGrid中顯示固定寬度的列? 

 

默認(rèn)情況下,,Gridview和Datagrid控件依據(jù)它們的內(nèi)容自動(dòng)調(diào)整列大小,。要為列指定固定寬度,設(shè)置每個(gè)Tablecell對(duì)象的Width屬性并設(shè)置Wrap屬性為False,。下面的例子顯示了如何通過使用DataGrid控件去做,。

 

protected void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)

{

    ListItemType lit = e.Item.ItemType;

    if (lit == ListItemType.Header)

    {

        for (int i = 0; i < e.Item.Cells.Count; i++)

        {

            e.Item.Cells[i].Width = Unit.Pixel(50);

            e.Item.Cells[i].Wrap = false;

        }

    }

}

 

  

4.4 何時(shí)使用GridView/DataGrid/DataList/Repeater控件?

 

關(guān)于應(yīng)該使用哪一個(gè)數(shù)據(jù)呈現(xiàn)控件的信息,,參見MSDN網(wǎng)站上的Deciding when to use the DataGrid, DataList, or Repeater,。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多