国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何于DataGridView控件中以跨數據行方式顯示數據

2024-07-21 02:28:33
字體:
來源:轉載
供稿:網友
菜鳥學堂:

一般來說,每一個字段的內容會單獨顯示于datagridview控件的一個數據行中。問題是,某些字段擁有大量文字數據,我是不是能夠讓該字段的內容以跨數據行的方式來顯示,以便在有限的畫面空間中的呈現出更完整的內容呢?答案當然是肯定的。


以圖表1所示的執行畫面而言,「自傳」字段的內容并未單獨顯示于一個數據行中,而是以橫跨數據行的方式,顯示在同筆數據列之各字段內容的下方。相關程序代碼列示如下:


using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;



private int oldrowindex = 0;
private const int custom_content_height = 80;
private dataset mydataset;

private void ch13_demoform009_load(object sender, eventargs e)
{
    padding newpadding = new padding(0, 1, 0, custom_content_height);
    this.datagridview1.rowtemplate.defaultcellstyle.padding = newpadding;

    this.datagridview1.rowtemplate.defaultcellstyle.selectionbackcolor =
        color.transparent;

    this.datagridview1.rowtemplate.height += custom_content_height;

    this.datagridview1.allowusertoaddrows = false;
    this.datagridview1.editmode = datagridvieweditmode.editonkeystrokeorf2;
    this.datagridview1.cellborderstyle = datagridviewcellborderstyle.none;
    this.datagridview1.selectionmode = datagridviewselectionmode.fullrowselect;

    mydataset = loaddatatodataset();

    if(mydataset != null)
    {
        // 將 bindingsource 組件系結至數據集對象中的「飛狐工作室」數據表。
        this.bindingsource1.datamember = "飛狐工作室";
        this.bindingsource1.datasource = mydataset;

        this.bindingsource1.allownew = false;

        // 將 bindingnavigator 控件的數據來源也設定成 bindingsource 組件
        //,如此一來,就可以使用 bindingnavigator 控件去導覽
        // datagridview 控件中的數據列。
        this.bindingnavigator1.bindingsource = this.bindingsource1;

        this.datagridview1.datasource = this.bindingsource1;
    }
    else
    {
        return;
    }

    this.datagridview1.columns[4].visible = false;

    this.datagridview1.columns[0].sortmode =
         datagridviewcolumnsortmode.notsortable;
    this.datagridview1.columns[2].sortmode =
         datagridviewcolumnsortmode.notsortable;
    this.datagridview1.columns[3].sortmode =
         datagridviewcolumnsortmode.notsortable;

 

 


    this.datagridview1.autoresizerows(
        datagridviewautosizerowsmode.allcellsexceptheaders);
}

private void datagridview1_columnwidthchanged(object sender,
                                         datagridviewcolumneventargs e)
{
    this.datagridview1.invalidate();
}

private void datagridview1_currentcellchanged(object sender, eventargs e)
{
    if(oldrowindex != -1)
    {
        this.datagridview1.invalidaterow(oldrowindex);
    }

    oldrowindex = this.datagridview1.currentcelladdress.y;
}

private void datagridview1_rowprepaint(object sender,
                            datagridviewrowprepainteventargs e)
{
    e.paintparts = e.paintparts & (~datagridviewpaintparts.focus);

    if((e.state & datagridviewelementstates.selected) ==
                                datagridviewelementstates.selected)
    {
        rectangle rowbounds = new rectangle(
            this.datagridview1.rowheaderswidth, e.rowbounds.top,
            this.datagridview1.columns.getcolumnswidth(
            datagridviewelementstates.visible) -
            this.datagridview1.horizontalscrollingoffset + 1,
            e.rowbounds.height);

        system.drawing.drawing2d.lineargradientbrush backbrush =
            new system.drawing.drawing2d.lineargradientbrush(rowbounds,
            this.datagridview1.defaultcellstyle.selectionbackcolor,
            e.inheritedrowstyle.forecolor,
            system.drawing.drawing2d.lineargradientmode.horizontal);

        try
        {
            e.graphics.fillrectangle(backbrush, rowbounds);
        }
        finally
        {
            backbrush.dispose();
        }
    }
}

private void datagridview1_rowpostpaint(object sender,
                               datagridviewrowpostpainteventargs e)
{
    rectangle rowbounds = new rectangle(this.datagridview1.rowheaderswidth,
        e.rowbounds.top, this.datagridview1.columns.getcolumnswidth(
   
    datagridviewelementstates.visible) -
        this.datagridview1.horizontalscrollingoffset + 1, e.rowbounds.height);

    solidbrush forebrush = null;

    try
    {
        if((e.state & datagridviewelementstates.selected) ==
            datagridviewelementstates.selected)
        {
            forebrush = new solidbrush(e.inheritedrowstyle.selectionforecolor);
        }
        else
        {
            forebrush = new solidbrush(e.inheritedrowstyle.forecolor);
        }

        object recipe =
          this.datagridview1.rows.sharedrow(e.rowindex).cells[4].value;

        if(!(recipe == null))
        {
            string text = recipe.tostring();
            rectangle textarea = rowbounds;
            rectanglef clip = textarea;

            textarea.x -= this.datagridview1.horizontalscrollingoffset;
            textarea.width += this.datagridview1.horizontalscrollingoffset;
            textarea.y += rowbounds.height - e.inheritedrowstyle.padding.bottom;
            textarea.height -= rowbounds.height -
                                   e.inheritedrowstyle.padding.bottom;
            textarea.height =
               (textarea.height / e.inheritedrowstyle.font.height) *
                e.inheritedrowstyle.font.height;
           
            clip.width -= this.datagridview1.rowheaderswidth + 1 - clip.x;
            clip.x = this.datagridview1.rowheaderswidth + 1;
                  
            rectanglef oldclip = e.graphics.clipbounds;

            e.graphics.setclip(clip);

            e.graphics.drawstring(text, e.inheritedrowstyle.font,
                                  forebrush, textarea);

            e.graphics.setclip(oldclip);
        }
    }
    finally
    {
        forebrush.dispose();
    }

    if (this.datagridview1.currentcelladdress.y == e.rowindex)
    {
        e.drawfocus(rowbounds, true);
    }
}

private void datagridview1_rowheightchanged(
                    object sender, datagridviewroweventargs e)
{
    int preferrednormalcontentheight =
       e.row.getpreferredheight(e.row.index,
        datagridviewautosizerowmode.allcellsexceptheader, true) -
        e.row.defaultcellstyle.padding.bottom;

    padding newpadding = e.row.defaultcellstyle.padding;
           
    newpadding.bottom = e.row.height - preferrednormalcontentheight;
    e.row.defaultcellstyle.padding = newpadding;
}

// 本程序會連接至數據來源并建立所需的 dataset 對象。
private dataset loaddatatodataset()
{
    // 利用 sqlconnectionstringbuilder 對象來構建連接字符串。
    sqlconnectionstringbuilder sqlstringbuilder =
        new sqlconnectionstringbuilder();

    sqlstringbuilder.datasource = @"(local)/sqlexpress";
    sqlstringbuilder.initialcatalog = "北風貿易";
    sqlstringbuilder.integratedsecurity = true;

    // 建立一個數據集。
    dataset ds = new dataset();

    try
    {
        using (sqlconnection northwindconnection =
            new sqlconnection(sqlstringbuilder.connectionstring))
        {
            sqlcommand cmdliming = new sqlcommand(
              "select 姓名,員工性別,出生日期, 目前薪資, 自傳" +
              " from dbo.飛狐工作室 where 自傳 is not null",
              northwindconnection);

            northwindconnection.open();

            using (sqldatareader drliming = cmdliming.executereader())
            {
                ds.load(
                  drliming,
                  loadoption.overwritechanges,
                  new string[] { "飛狐工作室" });
            }
        }
    }
    catch (exception)
    {
        messagebox.show(
            "要能夠順利執行本范例程序,您的計算機必須已安裝 sql server " +
            "express,并且必須已附加了本書所附的「北風貿易」數據庫。" +
            "關于如何安裝 sql server express,請參閱附錄或相關文件說明。");

        // 無法連接至 sql server。
        return null;
    }

    return ds;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁岭县| 米泉市| 建始县| 许昌县| 福海县| 玉山县| 济阳县| 承德县| 同心县| 县级市| 新营市| 新蔡县| 西青区| 海原县| 朝阳市| 永新县| 商河县| 如皋市| 会同县| 芦山县| 远安县| 高台县| 庆城县| 桃源县| 安仁县| 滦平县| 武鸣县| 平舆县| 广平县| 北流市| 综艺| 赤水市| 宜黄县| 论坛| 桦甸市| 辰溪县| 宁津县| 连云港市| 贵阳市| 西平县| 杭锦后旗|