DevExpress GridControl圖片列,圖片綁定與編輯保存

来源:https://www.cnblogs.com/hlyt/archive/2022/08/12/16578975.html
-Advertisement-
Play Games

需求如下,在DEV框架項目中,需要在表格中增加一列顯示圖片,並且能編輯該列圖片,然後進行保存等操作,最終效果如下 這裡使用的是PictureEdit控制項來實現,打開DEV GridControl設計器,在ColumnEdit選擇PictureEdit: 綁定圖片代碼如下: DataTable dtO ...


需求如下,在DEV框架項目中,需要在表格中增加一列顯示圖片,並且能編輯該列圖片,然後進行保存等操作,最終效果如下

 

 

 

 

 

 這裡使用的是PictureEdit控制項來實現,打開DEV GridControl設計器,在ColumnEdit選擇PictureEdit:

 

 

 

 綁定圖片代碼如下:

DataTable dtOutline = new DataTable("OutLine");
dtOutline.Columns.Add("outline", typeof(string));
dtOutline.Columns.Add("outline_pic", typeof(Image));
dtOutline.Columns.Add("cutspeed_min", typeof(float));
dtOutline.Columns.Add("cutspeed_max", typeof(float));
dtOutline.Columns.Add("cnt", typeof(float));

dtOutline.Rows.Add("", Properties.Resources.outline1, 200, 250, 100);
dtOutline.Rows.Add("", Properties.Resources.outline2, 100, 120, 60);
dtOutline.Rows.Add("", Properties.Resources.outline3, 150, 180, 100);
dtOutline.Rows.Add("", Properties.Resources.outline4, 100, 120, 100);
dgcOutline.DataSource = dtOutline;

編輯時,只需要點擊滑鼠右鍵--調用即可選擇圖片,由於本項目保存是將表格裡的數據存入本地.ini文件,因此我的方法是獲取到PictureEdit里的圖片然後存到本地的一個文件夾中,然後再將文件的路徑存入.ini文件,下次打開界面時先讀取.ini文件下對應的圖片路徑,再綁定到控制項,之所以這麼做是因為貌似PictureEdit無法像WEB端圖片控制項一樣直接獲取綁定的圖片路徑(如果大家知道怎麼獲取也可以留言告知)。

//保存圖片到文件夾 
Bitmap outlinePic = null;
if (dt.Rows[i]["outline_pic"] != DBNull.Value)
outlinePic = (Bitmap)dt.Rows[i]["outline_pic"];
string picName = "";
if (outlinePic != null)
{
  picName = $@"{Application.StartupPath}\Database\Files\CraftRecipe\outlinepic.png";
  outlinePic.Save(picName);
}
//將圖片路徑存入ini以便讀取圖片並綁定 INI操作方法不再贅述自行實現
DesignSettings.INI.SetValue(sec, "outline_pic", outline_pic);

這裡有一點要註意,假如選擇的文件不是png格式,採用以上方式保存的圖片是無法正常打開的,可以限制PictureEdit文件選擇框的類型,在OpenFileDialogFilter輸入:圖片文件(*.png)|*.png即可,如圖:

 

 

 

讀取時不要使用Image.FromFile()的方式,該方法會使圖片文件被占用,當我們更換了圖片想要保存表格數據時,會報錯,這裡採用Image.FromStream()從流中綁定得以解決

public byte[] GetImageByte(String path)
{
    using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
        BinaryReader br = new BinaryReader(fs);
        byte[] imgBytesIn = br.ReadBytes((int)fs.Length); //將流讀入到位元組數組中
        return imgBytesIn;
    }
}                
  
DataTable dtOutline = new DataTable("dtOutline");
dtOutline.Columns.Add("outline", typeof(string));
dtOutline.Columns.Add("outline_pic", typeof(Image));
dtOutline.Columns.Add("cutspeed_min", typeof(float));
dtOutline.Columns.Add("cutspeed_max", typeof(float));
dtOutline.Columns.Add("cnt", typeof(float));
string outline_pic = DesignSettings.INI.GetValue(sec, "outline_pic");
Image img = null;
if (!string.IsNullOrEmpty(outline_pic))
{
  if (File.Exists(outline_pic))
  {
    using (MemoryStream ms = new MemoryStream(GetImageByte(outline_pic)))
    {
      img = Image.FromStream(ms);
    }
  }
}
dtOutline.Rows.Add(outline, img, cutspeed_min, cutspeed_max, cnt);
dgcOutline.DataSource = dtOutline;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 很多小伙伴都喜歡小游戲源碼,想學一手Python做小游戲,問我做游戲難不難,要怎麼做,接下來我就介紹一下,如何用Python做游戲。 游戲演示 2048小游戲 表白彈窗 貪吃蛇 五子棋 俄羅斯方塊 超多小游戲,讓你一個爽個夠! 用PyGame做游戲非常簡單,我們今天第一篇文章,讓大家實現一個可以在地 ...
  • 我國目前並未出台專門針對網路爬蟲技術的法律規範,但在司法實踐中,相關判決已屢見不鮮,K 哥特設了“K哥爬蟲普法”專欄,本欄目通過對真實案例的分析,旨在提高廣大爬蟲工程師的法律意識,知曉如何合法合規利用爬蟲技術,警鐘長鳴,做一個守法、護法、有原則的技術人員。 案情介紹 深圳市快鴿互聯網科技有限公司 2 ...
  • 一、應用場景 大家在使用Mybatis進行開發的時候,經常會遇到一種情況:按照月份month將數據放在不同的表裡面,查詢數據的時候需要跟不同的月份month去查詢不同的表。 但是我們都知道,Mybatis是ORM持久層框架,即:實體關係映射,實體Object與資料庫表之間是存在一一對應的映射關係。比 ...
  • 背景 在 CI/CD 流程當中,測試是 CI 中很重要的部分。跟開發人員關係最大的就是單元測試,單元測試編寫完成之後,我們可以使用 IDE 或者 dot cover 等工具獲得單元測試對於業務代碼的覆蓋率。不過我們需要一個獨立的 CLI 工具,這樣我們才能夠在 Jenkins 的 CI 流程集成。 ...
  • 一:背景 上一篇我們聊到瞭如何去找 熱點函數,這一篇我們來看下當你的程式出現了 非托管記憶體泄漏 時如何去尋找可疑的代碼源頭,其實思路很簡單,就是在 HeapAlloc 或者 VirtualAlloc 時做 Hook 攔截,記錄它的調用棧以及分配的記憶體量, PerfView 會將這個 分配量 做成一個 ...
  • .NET 項目預設情況下 日誌是使用的 ILogger 介面,預設提供一下四種日誌記錄程式: 控制台 調試 EventSource EventLog 這四種記錄程式都是預設包含在 .NET 運行時庫中。關於這四種記錄程式的詳細介紹可以直接查看微軟的官方文檔 https://docs.microsof ...
  • 航天和軍工領域的數字化轉型和建設正在積極推進,在與航天二院、航天三院、航天六院、航天九院、無線電廠、兵工廠等單位交流的過程中,用戶更聚焦試驗和生產過程中的痛點,迫切需要解決軟體平臺統一監測和控制設備及軟體與設備協同的問題。 ...
  • 前兩天微軟偷偷更新了Visual Studio 2022 正式版版本 17.3 發佈,發佈摘要: MAUI 工作負荷 GA 生成 MAUI/Blazor CSS 熱重載支持 現在,你將能夠使用我們的新增功能在 Visual Studio 中使用每個更新試用一系列新功能。 選擇每個功能以瞭解有關特定功 ...
一周排行
    -Advertisement-
    Play Games
  • Github / Gitee QQ群(1群) : 813100564 / QQ群(2群) : 579033769 視頻教學 介紹 MiniWord .NET Word模板引擎,藉由Word模板和數據簡單、快速生成文件。 Getting Started 安裝 nuget link : https:// ...
  • Array.Sort Array類中相當實用的我認為是Sort方法,相比起冗長的冒泡排序,它的出現讓排序更加的簡化 結果如下: 還可以聲明一個靜態方法用來專門調用指定數組排序,從名為 array 的一維數組中 a 索引處開始,到 b 元素 從小到大排序。 註意: a + b 不能大於 array 的 ...
  • 前言 在上一篇文章CLR類型系統概述里提到,當運行時掛起時, 垃圾回收會執行堆棧遍歷器(stack walker)去拿到堆棧上值類型的大小和堆棧根。這裡我們來翻譯BotR里一篇專門介紹Stackwalking的文章,希望能加深理解。 順便說一句,StackWalker在中文里似乎還沒有統一的翻譯,J ...
  • 使用過 nginx 的小伙伴應該都知道,這個中間件是可以設置跨域的,作為今天的主角,同樣的 反向代理中間件的 YARP 毫無意外也支持了跨域請求設置。 有些小伙伴可能會問了,怎樣才算是跨域呢? 在 HTML 中,一些標簽,例如 img、a 等,還有我們非常熟悉的 Ajax,都是可以指向非本站的資源的 ...
  • 什麼是Git Git 是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的項目。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。 Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的 ...
  • 首先CR3是什麼,CR3是一個寄存器,該寄存器內保存有頁目錄表物理地址(PDBR地址),其實CR3內部存放的就是頁目錄表的記憶體基地址,運用CR3切換可實現對特定進程記憶體地址的強制讀寫操作,此類讀寫屬於有痕讀寫,多數驅動保護都會將這個地址改為無效,此時CR3讀寫就失效了,當然如果能找到CR3的正確地址... ...
  • 說明 onlyoffice為一款開源的office線上編輯組件,提供word/excel/ppt編輯保存操作 以下操作均基於centos8系統,officeonly鏡像版本7.1.2.23 鏡像下載地址:https://yunpan.360.cn/surl_y87CKKcPdY4 (提取碼:1f92 ...
  • 二叉樹查找指定的節點 前序查找的思路 1.先判斷當前節點的no是否等於要查找的 2.如果是相等,則返回當前節點 3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找 4.如果左遞歸前序查找,找到節點,則返回,否繼續判斷,當前的節點的右子節點是否為空,如果不為空,則繼續向右遞歸前 ...
  • ##Invalid bound statement (not found)出現原因和解決方法 ###前言: 想必各位小伙伴在碼路上經常會碰到奇奇怪怪的事情,比如出現Invalid bound statement (not found),那今天我就來分析以下出現此問題的原因。 其實出現這個問題實質就是 ...
  • ###一、背景知識 爬蟲的本質就是一個socket客戶端與服務端的通信過程,如果我們有多個url待爬取,只用一個線程且採用串列的方式執行,那隻能等待爬取一個結束後才能繼續下一個,效率會非常低。 需要強調的是:對於單線程下串列N個任務,並不完全等同於低效,如果這N個任務都是純計算的任務,那麼該線程對c ...