C# C1TrueDBGrid控制項如何載入圖片列

來源:互聯網
上載者:User

標籤:c#   image   圖片展示   truedbgrid   

表格中載入圖片是很常見的功能,尤其是網頁中,圖片的展示更是隨處可見。這個功能在bs中很容易就實現了:

前台代碼:

        <asp:GridView ID="GridView1" runat="server">            <Columns>                <asp:TemplateField>                    <ItemTemplate>                        <asp:Image ID="img1" ImageUrl='<%#Eval("img") %>' runat="server" AlternateText="image lost" />                    </ItemTemplate>                </asp:TemplateField>            </Columns>        </asp:GridView>


然後綁定上資料來源就可以了。

但是在CS項目中實現起來並不是那麼簡單。現在來說明下用C1TrueDBGrid控制項怎麼實現圖片的綁定與展示。

首先需要說明一點:C1TrueDBGrid控制項不能直接綁定包含圖片的資料來源,因為圖片是以OracleType.Blob類型儲存在資料庫中的,直接把查詢到資料來源綁定到控制項上會報錯。

具體的實現過程:

1 . 從資料庫查詢出兩個資料來源,一個包含圖片,一個包含圖片外的資訊。

        DataTable detailTbl = new DataTable();
        DataTable TablePic = new DataTable();

(具體查詢過程不再描述了)

2 . 將不包含圖片的資料來源綁定到控制項上。           

            //綁定資料來源
            DGVpic.DataSource = detailTbl;

3 . 動態添加一列,並設定其屬性。

            // 動態添加圖片列            C1.Win.C1TrueDBGrid.C1DataColumn Col = new C1.Win.C1TrueDBGrid.C1DataColumn();            DGVpic.Columns.Insert(0, Col);            Col.Caption = "Image";                  //列名稱            Col.DataType = Type.GetType("Byte");    //資料類型            Col.DataField = "b_pic_big";            //綁定欄位名稱            //設定圖片列的屬性            C1.Win.C1TrueDBGrid.C1DisplayColumn dc;            dc = DGVpic.Splits[0].DisplayColumns["b_pic_big"];            DGVpic.Splits[0].DisplayColumns.RemoveAt(DGVpic.Splits[0].DisplayColumns.IndexOf(dc));            DGVpic.Splits[0].DisplayColumns.Insert(0, dc);            dc.Visible = true;            dc.FetchStyle = true;          //FetchStyle = true 這點很重要!


4 . 利用DGVpic_FetchCellStyle事件,將包含圖片的資料來源填充到C1TrueDBGrid控制項上。在這裡涉及到兩次轉換,一是將Oracle Blob類型的資料強制轉換成byte[]類型,然後調用函數將byte[]轉換成Image類型,最後顯示出來。

        private void DGVpic_FetchCellStyle(object sender, C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e)        {            //在兩個資料來源中尋找出匹配項            DataRow[] dataRows = TablePic.Select("s_toolsid='" + detailTbl.Rows[e.Row]["s_toolsid"] + "'");            if (dataRows.Length != 0)            {                //將Oracle Blob類型的資料強制轉換成byte[]類型,然後調用GetImageFromByteArray函數將byte[]轉換成Image類型。                e.CellStyle.ForegroundImage = GetImageFromByteArray((byte[])dataRows[0]["b_pic_big"]);                e.CellStyle.ForeGroundPicturePosition = C1.Win.C1TrueDBGrid.ForeGroundPicturePositionEnum.PictureOnly;            }        }

GetImageFromByteArray方法:

        /// <summary>        /// 將byte[]類型轉換為Image類型,並返回        /// </summary>        /// <param name="picData"></param>        /// <returns></returns>        private Image GetImageFromByteArray(byte[] picData)        {            if (picData == null) return null;            int bmData = (picData[0] == 0x15 && picData[1] == 0x1c) ? 78 : 0;            Image img = null;            try            {   //進行轉換                System.IO.MemoryStream ms = new System.IO.MemoryStream(picData, bmData, picData.Length - bmData);                img = Image.FromStream(ms);            }            catch { }            // 返回得到的Image類型資料            return img;        }

做完這幾步,圖片就可以載入出來了。


綜上所述,有幾點應該特別注意:

1 . 上面也說了,C1TrueDBGrid控制項不能直接綁定包含圖片的資料來源,因為圖片是以OracleType.Blob類型儲存在資料庫中的,直接把查詢到資料來源綁定到控制項上會報錯。

1 . 綁定圖片列前,先給控制項綁定上資料來源,否則圖片列將不會顯示。原因是使用FetchCellStyle事件,該Cell要有值才能觸發該事件。

2 . 要將FetchStyle屬性設定為True

 

 

 

 

C# C1TrueDBGrid控制項如何載入圖片列

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.