=========环境配置=========================

创建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;滑动窗口协…