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
相关产品推荐
相关产品推荐

