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
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...