c# winform 使用DevExpress制作表格

=========環境配置=========================

創建c# winform 新項目 test_devexpress

添加引用

把DevExpress.XtraGrid.v17.1.dll拖到工具箱

================================================

在界面中,加入2個 GridControl

設計器代碼:

namespace test_devexpress
{partial class Form1{/// <summary>/// 必需的設計器變量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的資源。/// </summary>/// <param name="disposing">如果應釋放托管資源,為 true;否則為 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗體設計器生成的代碼/// <summary>/// 設計器支持所需的方法 - 不要修改/// 使用代碼編輯器修改此方法的內容。/// </summary>private void InitializeComponent(){this.button_start = new System.Windows.Forms.Button();this.gridControl1 = new DevExpress.XtraGrid.GridControl();this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();this.gridControl2 = new DevExpress.XtraGrid.GridControl();this.gridView2 = new DevExpress.XtraGrid.Views.Grid.GridView();((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridControl2)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridView2)).BeginInit();this.SuspendLayout();// // button_start// this.button_start.Location = new System.Drawing.Point(512, 609);this.button_start.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.button_start.Name = "button_start";this.button_start.Size = new System.Drawing.Size(219, 74);this.button_start.TabIndex = 0;this.button_start.Text = "button1";this.button_start.UseVisualStyleBackColor = true;this.button_start.Click += new System.EventHandler(this.button_start_Click);// // gridControl1// this.gridControl1.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl1.Location = new System.Drawing.Point(350, 54);this.gridControl1.MainView = this.gridView1;this.gridControl1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl1.Name = "gridControl1";this.gridControl1.Size = new System.Drawing.Size(573, 174);this.gridControl1.TabIndex = 0;this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {this.gridView1});// // gridView1// this.gridView1.GridControl = this.gridControl1;this.gridView1.Name = "gridView1";// // gridControl2// this.gridControl2.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl2.Location = new System.Drawing.Point(350, 316);this.gridControl2.MainView = this.gridView2;this.gridControl2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl2.Name = "gridControl2";this.gridControl2.Size = new System.Drawing.Size(562, 179);this.gridControl2.TabIndex = 0;this.gridControl2.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {this.gridView2});// // gridView2// this.gridView2.GridControl = this.gridControl2;this.gridView2.Name = "gridView2";// // Form1// this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(1276, 751);this.Controls.Add(this.gridControl1);this.Controls.Add(this.button_start);this.Controls.Add(this.gridControl2);this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.Name = "Form1";this.Text = "Form1";((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridControl2)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridView2)).EndInit();this.ResumeLayout(false);}#endregionprivate System.Windows.Forms.Button button_start;private DevExpress.XtraGrid.GridControl gridControl1;private DevExpress.XtraGrid.Views.Grid.GridView gridView1;private DevExpress.XtraGrid.GridControl gridControl2;private DevExpress.XtraGrid.Views.Grid.GridView gridView2;}
}

===============================================

定義表格數據源

? ? ? ? // 創建數據源
DataTable dt = new DataTable();
DataTable dt2 = new DataTable();

初始化表格函數:

? private void ConfigureGridView(object sender, EventArgs e)
{
// 清除默認列
gridView1.Columns.Clear();
gridView2.Columns.Clear();


dt.Columns.Add("工作收入");
dt.Columns.Add("補貼收入");
dt.Columns.Add("股票收入");
dt.Columns.Add("生活支出");
dt.Columns.Add("房租支出");
dt.Columns.Add("通勤支出");
dt.Rows.Add("8500", "0", "0", "0", "1200", "0");

? ? ? gridControl1.DataSource = dt;

? ? ? dt2.Columns.Add("總收入");
dt2.Columns.Add("總支出");
dt2.Columns.Add("凈收入");
dt2.Rows.Add("0", "0", "0");

? ? ? gridControl2.DataSource = dt2;


// 可選:設置自動調整列寬
gridView1.BestFitColumns();
gridView2.BestFitColumns();
}

Columns.Add增加列

Rows.Add增加行

(注意要先添加列,添加行中的元素個數要和列數一致)

運行后:

===========================================================

在button的點擊事件中獲取表一的數據,并計算,然后輸出到表二。

獲取數據:對于數據dt

使用

int money = Convert.ToInt32(dt.Rows[0]["工作收入"]? )

來獲取“工作收入”一項中的第0行的數據。

使用

dt2.Rows[0]["總支出"] =? 1000

給總支出的第0行 寫入數據1000。

完整代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;namespace test_devexpress
{public partial class Form1 : Form{// 創建數據源DataTable dt = new DataTable();DataTable dt2 = new DataTable();public Form1(){InitializeComponent();Load += ConfigureGridView; // 訂閱窗體加載事件}private void ConfigureGridView(object sender, EventArgs e){// 清除默認列gridView1.Columns.Clear();gridView2.Columns.Clear();dt.Columns.Add("工作收入");dt.Columns.Add("補貼收入");dt.Columns.Add("股票收入");dt.Columns.Add("生活支出");dt.Columns.Add("房租支出");dt.Columns.Add("通勤支出");dt.Rows.Add("8500", "0", "0", "0", "1200", "0");gridControl1.DataSource = dt;dt2.Columns.Add("總收入");dt2.Columns.Add("總支出");dt2.Columns.Add("凈收入");dt2.Rows.Add("0", "0", "0");gridControl2.DataSource = dt2;// 可選:設置自動調整列寬gridView1.BestFitColumns();gridView2.BestFitColumns();}private void button_start_Click(object sender, EventArgs e){// 獲取表一數據源DataTable dt1 = (DataTable)gridControl1.DataSource;decimal totalIncome = 0, totalExpense = 0;// 計算總收入和總支出foreach (DataRow row in dt1.Rows){// 收入計算totalIncome += Convert.ToDecimal(row["工作收入"]);totalIncome += Convert.ToDecimal(row["補貼收入"]);totalIncome += Convert.ToDecimal(row["股票收入"]);// 支出計算totalExpense += Convert.ToDecimal(row["生活支出"]);totalExpense += Convert.ToDecimal(row["房租支出"]);totalExpense += Convert.ToDecimal(row["通勤支出"]);}decimal netIncome = totalIncome - totalExpense;// 更新表二數據DataTable dt2 = (DataTable)gridControl2.DataSource;dt2.Rows[0]["總收入"] = totalIncome.ToString("N0");  // 格式化為千位分隔符dt2.Rows[0]["總支出"] = totalExpense.ToString("N0");dt2.Rows[0]["凈收入"] = netIncome.ToString("N0");// 刷新表格顯示gridView2.RefreshData();}}
}

運行后,輸入數據:

=====================

表格單元格的 雙擊事件

如圖。雙擊表二的各種操作,執行對應月份的計算,并顯示。

實現:

雙擊事件:

? ? ? ? private void GridView2_DoubleClick(object sender, EventArgs e)
{
// 獲取點擊的位置
GridView view = sender as GridView;
GridHitInfo hitInfo = view.CalcHitInfo(view.GridControl.PointToClient(MousePosition));

? ? ? ? ? ? // 檢查是否點擊了單元格
if (hitInfo.InRowCell)
{
int rowHandle = hitInfo.RowHandle;
GridColumn column = hitInfo.Column;

? ? ? ? ? ? ? ? // 獲取月份(列字段名)
string month = column.FieldName;

? ? ? ? ? ? ? ? // 獲取操作類型(行索引)
string operation = view.GetRowCellDisplayText(rowHandle, "操作");

? ? ? ? ? ? ? ? // 只處理前三種操作
if (rowHandle >= 0 && rowHandle <= 2)
{
double result = 0;

? ? ? ? ? ? ? ? ? ? // 根據操作類型進行計算
switch (operation)
{
case "操作1": // 總收入
result = CalculateTotalIncome(month);
break;
case "操作2": // 總支出
result = CalculateTotalExpense(month);
break;
case "操作3": // 凈收入
result = CalculateNetIncome(month);
break;
}

? ? ? ? ? ? ? ? ? ? // 更新結果行(第4行,索引為3)
dt2.Rows[3][month] = result.ToString();

? ? ? ? ? ? ? ? ? ? // 刷新顯示
gridControl2.RefreshDataSource();
}
}
}

完整代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;namespace test_devexpress
{public partial class Form1 : Form{// 創建數據源DataTable dt = new DataTable();DataTable dt2 = new DataTable();public Form1(){InitializeComponent();Load += ConfigureGridView; // 訂閱窗體加載事件}private void ConfigureGridView(object sender, EventArgs e){// 清除默認列gridView1.Columns.Clear();gridView2.Columns.Clear();dt.Columns.Add("序號");dt.Columns.Add("工作收入");dt.Columns.Add("補貼收入");dt.Columns.Add("股票收入");dt.Columns.Add("生活支出");dt.Columns.Add("房租支出");dt.Columns.Add("通勤支出");dt.Rows.Add("一月", "8500", "0", "0", "0", "1200", "0");dt.Rows.Add("二月", "8500", "0", "0", "0", "1200", "0");dt.Rows.Add("三月", "8500", "0", "0", "0", "1200", "0");gridControl1.DataSource = dt;dt2.Columns.Add("操作");dt2.Columns.Add("一月");dt2.Columns.Add("二月");dt2.Columns.Add("三月");dt2.Rows.Add("操作1", "總收入", "總收入", "總收入");dt2.Rows.Add("操作2", "總支出", "總支出", "總支出");dt2.Rows.Add("操作3", "凈收入", "凈收入", "凈收入");dt2.Rows.Add("雙擊后顯示結果", "0", "0", "0");gridControl2.DataSource = dt2;// 設置gridView2為不可編輯gridView2.OptionsBehavior.Editable = false;// 為gridView2添加雙擊事件處理gridView2.DoubleClick += GridView2_DoubleClick;// 可選:設置自動調整列寬gridView1.BestFitColumns();gridView2.BestFitColumns();}private void GridView2_DoubleClick(object sender, EventArgs e){// 獲取點擊的位置GridView view = sender as GridView;GridHitInfo hitInfo = view.CalcHitInfo(view.GridControl.PointToClient(MousePosition));// 檢查是否點擊了單元格if (hitInfo.InRowCell){int rowHandle = hitInfo.RowHandle;GridColumn column = hitInfo.Column;// 獲取月份(列字段名)string month = column.FieldName;// 獲取操作類型(行索引)string operation = view.GetRowCellDisplayText(rowHandle, "操作");// 只處理前三種操作if (rowHandle >= 0 && rowHandle <= 2){double result = 0;// 根據操作類型進行計算switch (operation){case "操作1": // 總收入result = CalculateTotalIncome(month);break;case "操作2": // 總支出result = CalculateTotalExpense(month);break;case "操作3": // 凈收入result = CalculateNetIncome(month);break;}// 更新結果行(第4行,索引為3)dt2.Rows[3][month] = result.ToString();// 刷新顯示gridControl2.RefreshDataSource();}}}private double CalculateTotalIncome(string month){// 在dt中查找對應月份的行DataRow[] rows = dt.Select($"序號 = '{month}'");if (rows.Length > 0){DataRow row = rows[0];return Convert.ToDouble(row["工作收入"]) +Convert.ToDouble(row["補貼收入"]) +Convert.ToDouble(row["股票收入"]);}return 0;}private double CalculateTotalExpense(string month){// 在dt中查找對應月份的行DataRow[] rows = dt.Select($"序號 = '{month}'");if (rows.Length > 0){DataRow row = rows[0];return Convert.ToDouble(row["生活支出"]) +Convert.ToDouble(row["房租支出"]) +Convert.ToDouble(row["通勤支出"]);}return 0;}private double CalculateNetIncome(string month){return CalculateTotalIncome(month) - CalculateTotalExpense(month);}private void button_start_Click(object sender, EventArgs e){// 刷新表格顯示gridView2.RefreshData();}}
}

其中:

CalculateTotalIncome:計算指定月份的總收入

CalculateTotalExpense:計算指定月份的總支出

CalculateNetIncome:計算指定月份的凈收入

namespace test_devexpress
{partial class Form1{/// <summary>/// 必需的設計器變量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的資源。/// </summary>/// <param name="disposing">如果應釋放托管資源,為 true;否則為 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗體設計器生成的代碼/// <summary>/// 設計器支持所需的方法 - 不要修改/// 使用代碼編輯器修改此方法的內容。/// </summary>private void InitializeComponent(){this.button_start = new System.Windows.Forms.Button();this.gridControl1 = new DevExpress.XtraGrid.GridControl();this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();this.gridControl2 = new DevExpress.XtraGrid.GridControl();this.gridView2 = new DevExpress.XtraGrid.Views.Grid.GridView();((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridControl2)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridView2)).BeginInit();this.SuspendLayout();// // button_start// this.button_start.Location = new System.Drawing.Point(512, 649);this.button_start.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.button_start.Name = "button_start";this.button_start.Size = new System.Drawing.Size(219, 74);this.button_start.TabIndex = 0;this.button_start.Text = "button1";this.button_start.UseVisualStyleBackColor = true;this.button_start.Click += new System.EventHandler(this.button_start_Click);// // gridControl1// this.gridControl1.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl1.Location = new System.Drawing.Point(327, 13);this.gridControl1.MainView = this.gridView1;this.gridControl1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl1.Name = "gridControl1";this.gridControl1.Size = new System.Drawing.Size(685, 267);this.gridControl1.TabIndex = 0;this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {this.gridView1});// // gridView1// this.gridView1.GridControl = this.gridControl1;this.gridView1.Name = "gridView1";// // gridControl2// this.gridControl2.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl2.Location = new System.Drawing.Point(327, 319);this.gridControl2.MainView = this.gridView2;this.gridControl2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.gridControl2.Name = "gridControl2";this.gridControl2.Size = new System.Drawing.Size(685, 306);this.gridControl2.TabIndex = 0;this.gridControl2.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {this.gridView2});// // gridView2// this.gridView2.GridControl = this.gridControl2;this.gridView2.Name = "gridView2";// // Form1// this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(1276, 751);this.Controls.Add(this.gridControl1);this.Controls.Add(this.button_start);this.Controls.Add(this.gridControl2);this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);this.Name = "Form1";this.Text = "Form1";((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridControl2)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridView2)).EndInit();this.ResumeLayout(false);}#endregionprivate System.Windows.Forms.Button button_start;private DevExpress.XtraGrid.GridControl gridControl1;private DevExpress.XtraGrid.Views.Grid.GridView gridView1;private DevExpress.XtraGrid.GridControl gridControl2;private DevExpress.XtraGrid.Views.Grid.GridView gridView2;}
}

運行后:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96361.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫之間如何同步

數據庫之間如何同步&#xff1a;三種高效方法詳解 數據同步無小事&#xff0c;選對方法事半功倍 在現代數據驅動的環境中&#xff0c;??數據庫之間如何同步??是確保業務連續性和數據一致性的核心技術。本文將深入介紹三種主流的數據庫同步方法&#xff0c;幫助您根據實際需…

《我的世界》中實現強化學習(RL)算法

在《我的世界》中實現強化學習&#xff08;RL&#xff09;是一個巨大的挑戰&#xff0c;而獎勵函數&#xff08;Reward Function&#xff09;的設計是其中最核心、最困難的部分&#xff0c;直接決定了算法能否成功學習。 下面我將為你提供一個系統的設計框架、策略和注意事項。…

智能光場:深度學習重構計算光學成像新范式!

1.掌握深度學習算法的原理和應用&#xff0c;剖析計算成像主流研究范圍及關聯的統一計算范式&#xff0c;能夠運用深度學習技術對光學成像系統進行創新設計和優化。2.掌握利用深度學習從成像設備優化設計、典型計算成像任務以及后端的計算機視覺任務的認知框架&#xff0c;并掌…

深入理解 MyBatis-Plus 的 QueryWrapper:動態 SQL 構建的利器

關鍵詞&#xff1a;MyBatis-Plus、QueryWrapper、動態 SQL、Java、ORM 一、引言 在 Java 后端開發中&#xff0c;MyBatis-Plus&#xff08;簡稱 MP&#xff09;作為 MyBatis 的增強工具&#xff0c;極大地簡化了 CRUD 操作。而其中最核心的功能之一&#xff0c;就是動態 SQL 的…

WMIC用法

WMIC用法基本語法結構1. 全局開關&#xff08;可選&#xff0c;控制整體行為&#xff09;2. 別名&#xff08;Alias&#xff09;3. 動詞&#xff08;Verb&#xff09;4. 參數&#xff08;可選&#xff09;常用示例幫助命令WMIC&#xff08;Windows Management Instrumentation …

Spring Boot--yml配置信息書寫和獲取

案例&#xff1a;Spring Boot整合Mybatis步驟一&#xff1a;導入依賴步驟二&#xff1a;添加數據庫需要的數據源配置步驟三&#xff1a;編寫實體類步驟四&#xff1a;創建mapper類&#xff0c;操作數據庫步驟五&#xff1a;創建Service接口和接口實現類步驟六&#xff1a;創建C…

創作紀念日·512天

嘿嘿&#xff0c;不知不覺間&#xff0c;已經到了512天創作紀念日了。 回憶 遙想我在《我的創作紀念日》一篇中寫道&#xff0c;想要改名為 十二 &#xff0c;作為對過去生活的懷念&#xff0c;沒想到這個名字被搶了&#xff0c;好可惜。 想到25年4月13日寫紀念日博客時的自己…

在 Berachain 上,如何通過 BERA 實現一魚多吃?

Berachain 的 PoL&#xff08;Proof of Liquidity&#xff09;機制是其最具辨識度的創新之一。通過將 DeFi 的激勵邏輯深度嵌入共識層&#xff0c;不僅為底層網絡注入了充足的流動性&#xff0c;保障了安全性&#xff0c;同時也有效推動了生態應用的增長&#xff0c;更為用戶創…

LangGraph和aiagent

1. LangGraph&#xff1a;用圖思維重構Agent工作流LangGraph是LangChain團隊開源的圖式Agent編排框架&#xff0c;它基于"有向圖"模型&#xff0c;將Agent的運行流程抽象為"節點 狀態流轉"。其核心設計理念是用有向狀態圖&#xff08;Directed State Grap…

《從iptables到ipvs:云原生網絡轉發的性能拐點突破》

這套基于Spring Cloud Alibaba搭建的架構,部署于阿里云ACK集群的10個4核8G節點上,默認配置6個Pod副本,搭配HPA彈性擴縮容機制與Ingress網關流量分發,理論上具備應對3倍日常流量的承載能力。然而實際運行中,每日早9點、午2點、晚8點三次流量峰值來臨時,訂單服務會在120秒內…

大數據存儲域——Kafka設計原理

摘要本文主要介紹了Kafka的架構原理、消息訂閱模式以及在金融風控等領域的應用。Kafka作為數據中轉站&#xff0c;可同步不同系統數據&#xff0c;支持事件驅動架構&#xff0c;廣泛應用于金融支付與風控場景。其架構包括Producer、Broker、Topic、Partition、Replication、Mes…

[特殊字符] GitHub 熱門開源項目速覽(2025/09/09)

今天為大家整理了近期 GitHub 上熱度較高的開源項目&#xff0c;涵蓋 AI Agent、加密計算、操作系統、機器人、PDF 工具 等多個方向。讓我們一起看看都有哪些值得關注的項目吧&#xff01; &#x1f539; AI Agents & 開發者工具 parlant &#xff08;? 10.9k | ?? 117…

OpenHarmony之USB Manager 架構深度解析

1. 整體架構 OpenHarmony USB管理器采用三層架構設計: USB API:提供USB的基礎API,主要包含查詢USB設備的列表、設備插拔通知、USB HOST/DEVICE 功能切換、批量數據傳輸、控制命令傳輸、USB設備打開的權限控制及USB device模式下的function功能切換等。 USB Service:主要實…

java面試中經常會問到的mysql問題有哪些(基礎版)

文章目錄一、基礎概念與存儲引擎二、索引設計與優化&#xff08;高頻重點&#xff09;三、事務與鎖&#xff08;核心原理&#xff09;四、SQL性能優化與問題排查五、高可用與數據安全六、其他高頻細節問題在Java面試中&#xff0c;MySQL作為最常用的關系型數據庫&#xff0c;是…

Tess-two - Tess-two 文字識別(Tess-two 概述、Tess-two 文字識別、補充情況)

一、Tess-two 概述Tess-two 是 Tesseract OCR 引擎在 Android 平臺上的一個封裝庫&#xff0c;用于實現離線文字識別Tess-two 的 GitHub 官網&#xff1a;https://github.com/rmtheis/tess-two二、Tess-two 文字識別 1、演示 &#xff08;1&#xff09;Dependencies 模塊級 bui…

八、Win/Linux/macOS全平臺徹底卸載Docker的操作指南

八、Win/Linux/macOS全平臺徹底卸載Docker的操作指南 系列文章目錄 1. 卸載前準備工作(可忽略) 1.1 數據備份 1.2 停止Docker服務 2. 不同操作系統卸載步驟 2.1 Linux系統 2.2 macOS系統 2.3 Windows系統 3. 殘留文件深度清理 3.1 Linux系統 3.2 macOS系統 3.3 Windows系統 4…

強化學習-CH9 策略梯度方法

強化學習-CH9 策略梯度方法 當策略被表示為函數時&#xff0c;通過優化目標函數可以得到最優策略。 這種方法稱為策略梯度。策略梯度方法是基于策略的&#xff0c;而之前介紹的方法都是基于值的。其本質區別在于基于策略的方法是直接優化關于策略參數的目標函數。 9.1 策略表示…

[玩轉GoLang] 5分鐘整合Gin / Gorm框架入門

方法 / 步驟 一: Gin框架 1.1 : 環境 & 項目配置 1, GoLand創建項目 創建main.go package mainimport ("github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/", func(c *gin.Context) {c.JSON(200, gin.H{"message": "…

【項目復現】MOOSE-Chem 用于重新發現未見化學科學假說的大型語言模型

項目地址 ZonglinY/MOOSE-Chem: [ICLR 2025] --- ZonglinY/MOOSE-Chem: [ICLR 2025] https://github.com/ZonglinY/MOOSE-Chem git代碼同步&#xff1a; 同步地址如下&#xff1a;QianPengfei1/MOOSE-Chem: [ICLR 2025] <MOOSE-Chem: Large Language Models for Rediscove…

深入解析TCP核心機制:連接管理、流量與擁塞控制

目錄 一、三次握手與四次揮手&#xff1a;可靠連接的建立與終止 1. 三次握手 - 建立連接 為什么是三次&#xff1f; 2. 四次揮手 - 終止連接 為什么需要TIME_WAIT狀態&#xff1f; 二、流量控制與滑動窗口&#xff1a;解決收發速度不匹配 核心機制&#xff1a;滑動窗口協…