You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中如何将DataGridView拼接列值传递到另一窗体指定文本框?

问题根源与核心解决方案

  • 直接用sName/fName/MIName列取值无效,大概率是你SQL查询时只返回了拼接后的OwnerName列,没有把原三列包含进去。DataGridView的数据源里没有这三列,自然取不到值。

解决办法1:修改SQL查询(最优方案)

把原列也选出来,哪怕不在DataGridView里显示,比如:

SELECT sName, fName, MIName, CONCAT(sName, ' ', fName, ' ', MIName) AS OwnerName FROM 你的表名;

这样DataGridView的数据源里就保留了原三列,你可以继续用最初的代码直接取值,完全避免拆分姓名的问题:

FORM3.txtbx_snameREN.Text = dtgrdView.CurrentRow.Cells("sName").Value.ToString()
FORM3.txtbx_fnameREN.Text = dtgrdView.CurrentRow.Cells("fName").Value.ToString()
FORM3.txtbx_MI_REN.Text = dtgrdView.CurrentRow.Cells("MIName").Value.ToString()

如果不想让这三列显示在DataGridView里,只要设置对应列的Visible = False即可。

解决办法2:从拼接的OwnerName拆分(仅当无法修改SQL时使用)

因为双词姓氏的存在,不能从前面拆分,得从后往前拆分——假设你的拼接规则是「姓氏(可能含空格) + 名字 + 中间名首字母」,且中间名是单个字符(比如A或A.),可以这么写:

Dim fullName As String = dtgrdView.CurrentRow.Cells("OwnerName").Value.ToString().Trim()
Dim nameParts As List(Of String) = fullName.Split({" "c}, StringSplitOptions.RemoveEmptyEntries).ToList()

' 取最后一个部分作为中间名
If nameParts.Count >= 1 Then
    FORM3.txtbx_MI_REN.Text = nameParts.Last()
    nameParts.RemoveAt(nameParts.Count - 1)
End If

' 取剩下部分的最后一个作为名字
If nameParts.Count >= 1 Then
    FORM3.txtbx_fnameREN.Text = nameParts.Last()
    nameParts.RemoveAt(nameParts.Count - 1)
End If

' 剩余所有部分拼接为姓氏(支持多词姓氏)
FORM3.txtbx_snameREN.Text = String.Join(" ", nameParts)

这个逻辑能完美处理De Rama John A这类情况:最后一个部分A是中间名,剩下的最后一个John是名字,剩余的De和Rama拼接成De Rama作为姓氏。

内容的提问来源于stack exchange,提问作者rosesarecute andurtoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:18:14