为什么dgv控件单元格的value值改变了,但是表格显示的数据还是没有更新

年轻的程序员小唐 2019-10-10 02:50:02
主窗体的代码:Form1

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedTab.Name.Contains("组呼列表"))
{
FormCallGroup FCG = new FormCallGroup(dataApplication,tabControl1.SelectedTab.Name);//我想通过重载使得切换页面的时候表格数据一直更新
FCG.loadForm();

}
}


子窗体FormCallGroup的代码


public FormCallGroup(DataApplication data,string key)
{
InitializeComponent();
dataCallGroup = data.dicCG[key];
if (FormLinker.datalinker != null)
{
for (int i = 0; i < FormLinker.datalinker.dataLinker.Count; i++)
{ datalinker.Add(FormLinker.datalinker.dataLinker[i].Linker_name); }
}
numberA = datalinker.Count;
//FormCallGroup窗体的初始化,载入一些数据和表格初始化
if (dgv_member.Rows.Count == 0)
{
for (int i = 0; i < 14; i++)
{ dgv_available.Rows.Add(new DataGridViewRow()); }
}
if (dgv_member.Rows.Count == 0)
{
for (int i = 0; i < 14; i++)
{ dgv_member.Rows.Add(new DataGridViewRow()); }
}
dgv_available.ClearSelection();
dgv_member.ClearSelection();
dgv_available.RowStateChanged += new DataGridViewRowStateChangedEventHandler(handleRowState);
loadData();
}



public void FormCallGroup_Load(object sender, EventArgs e)
{
if (FormLinker.datalinker != null && datalinker.Count!=0)
{
dgv_available.Enabled = true;
for (int i = 0; i < datalinker.Count; i++)
{
if (dgv_available.Rows[i].Cells[0] != null)
{
dgv_available.Rows[i].ReadOnly = false;
dgv_available.Rows[i].Selected = false;
}
}
}
else
{ dgv_available.Enabled = false; }
//当数据为空时表格不可操作
if(dataCallGroup!=null&&dataCallGroup.Count!=0)
{
dgv_member.Enabled = true;
for (int i = 0; i < datalinker.Count; i++)
{
if (dgv_member.Rows[i].Cells[0] != null)
{
dgv_member.Rows[i].ReadOnly = false;
dgv_member.Rows[i].Selected = false;
}
}
}
else
{ dgv_member.Enabled = false; }

}



private void loadData()
{
if (datalinker.Count > 0)
{
for (int i = 0; i < datalinker.Count; i++)
{
dgv_available.Rows[i].Cells[0].Value = datalinker[i];
}
}
//单元格赋值
if (dataCallGroup.Count > 0 && dataCallGroup!=null)
{
for (int i = 0; i < dataCallGroup.Count; i++)
{
dgv_member.Rows[i].Cells[0].Value = i + 1;
dgv_member.Rows[i].Cells[1].Value = dataCallGroup[i].Linker_name;
}
}
}


public void loadForm()
{
List<string> datalinker = new List<string>();
List<string> datacallgroup = new List<string>();
if (dataCallGroup == null || dataCallGroup.Count == 0)
{ }
else
{
for (int i = 0; i < dataCallGroup.Count; i++)
{
datacallgroup.Add(dataCallGroup[i].Linker_name);
}
}
if (FormLinker.datalinker != null)
{
for (int i = 0; i < FormLinker.datalinker.dataLinker.Count; i++)
{ datalinker.Add(FormLinker.datalinker.dataLinker[i].Linker_name); }
for (int i = 0; i < datalinker.Count; i++)
{
for (int j = 0; j < datacallgroup.Count; j++)
{
if (datalinker[i] == datacallgroup[j])
{ datalinker.RemoveAt(i); }
}
}
}
//切换页面时做的一些数据处理,让数据在原有数据的基础上更新
numberA = datalinker.Count;
loadData();

}


我做的是这样的,在主窗体Form1中有一个tabcontrol里面存放着两种窗体Formlinker和FormCallGroup
其中Formlinker内的数据更新时,FormCallGroup的数据也要跟着刷新,附图


Formlinker.数字联系人=FormCallGroup.可用的+FormCallGroup.成员

然后我代码这样子写,只有当tabpage被新建出来的时候FormCallGroup.可用的表的数据才会刷新
但是我监控的时候看到表的Value是有被赋值的这是为什么
...全文
330 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不好意思我忘记写tabControl1.SelectedTab.Controls.clear()了
  • 打赏
  • 举报
回复
引用 3 楼 Bridge_go 的回复:
你这个事件 tabControl1_SelectedIndexChanged 不是每次切换选项卡都会创建一个 FormCallGroup;
还有你这 FormCallGroup好像没有show出来吧

FormCallGroup FCG = new FormCallGroup(dataApplication,tabControl1.SelectedTab.Name);
FCG.loadForm();
FCG.FormBorderStyle=System.Windows.Forms.FormBorderStyle.None;
FCG.TopLevel = false;
FCG.Dock = DockStyle.Fill;
FCG.Show();
tabControl1.SelectedTab.Controls.Add(FCG);

不知道是不是我代码写错,这个tabpage页面还是没有更新,然后我把其他代码屏蔽了就保留FCG.Show();,看到FCG窗体里的数据确实是更新的但是却没在tabpage里显示出来,是不是被覆盖掉了
Bridge_go 2019-10-10
  • 打赏
  • 举报
回复
类似这样的
            Form2 f2 = new Form2();
            f2.TopLevel = false;
            f2.Show();
            this.tabPage1.Controls.Add(f2);
  • 打赏
  • 举报
回复
引用 3 楼 Bridge_go 的回复:
你这个事件 tabControl1_SelectedIndexChanged 不是每次切换选项卡都会创建一个 FormCallGroup;
还有你这 FormCallGroup好像没有show出来吧

有道理!!!,那怎么把这个窗体Show在tabpage里呢
Bridge_go 2019-10-10
  • 打赏
  • 举报
回复
你这个事件 tabControl1_SelectedIndexChanged 不是每次切换选项卡都会创建一个 FormCallGroup; 还有你这 FormCallGroup好像没有show出来吧
  • 打赏
  • 举报
回复
难道说我实际上并没有改变tabpage中的form的值,而是另外重载了一个form,那么我要如何取得这个tabpage下的form呢
  • 打赏
  • 举报
回复
大概意思就是,我监控的时候看到表格单元格的value被赋值了但是表格并没有刷新这是为啥
内容概要:本文详细介绍了MySQL中InnoDB存储引擎的逻辑存储结构及其表分区技术。InnoDB的逻辑存储单元由高到低依次为表空间、段、区、页和行,其中表空间包括系统表空间、独立表空间、通用表空间、Undo表空间和临时表空间,每种表空间具有不同的用途和管理方式。文章进一步讲解了表分区的概念与类型,包括RANGE、LIST、HASH、KEY以及多字段COLUMNS分区,阐述了分区的优势如提升查询性能、便于数据维护、支持跨物理设备存储等,并列举了实际SQL操作示例,帮助理解分区表的创建、修改、删除及重组等操作。同时指出了分区的限制条件,如最大分区数量、主键约束要求等。; 适合人群:具备一定MySQL数据库基础,从事数据库开发、运维或架构设计的技术人员,尤其是工作中涉及大数据量表管理与性能优化的1-3年经验研发人员。; 使用场景及目标:①深入理解InnoDB存储机制,优化数据库物理结构设计;②掌握表分区技术,应用于海量数据存储与高效查询场景,如日志系统、订单系统的时间分区设计;③通过分区实现数据归档、快速删除历史数据、提升查询性能等运维目标; 阅读建议:学习时应结合MySQL实际环境动手实践文中提供的SQL命令,重点关注表空间管理和分区策略的选择,理解其对性能和维护的影响,并注意分区使用中的限制条件以避免设计失误。
内容概要:本文系统介绍了GitHub Copilot的实战使用技巧,涵盖其核心功能、提示工程、上下文管理、自定义配置及常见误区。文章强调Copilot不仅是代码补全工具,更是覆盖软件开发全生命周期的AI编程助手,重点讲解如何通过上下文工程、提示词结构化、斜杠命令与聊天参与者等方式提升代码生成质量,并结合实战案例展示在测试生成、代码重构、调试、文档编写等场景中的高效应用。同时指出Copilot的局限性,倡导“人为主导、AI辅助”的协作模式,强调代码审查与安全合规的重要性。; 适合人群:具备一定编程经验,希望提升开发效率的个人开发者、团队工程师及技术管理者,尤其是正在使用或计划引入AI编程工具的研发人员。; 使用场景及目标:①掌握Copilot在测试生成、代码解释、重构优化、调试排错等方面的高级用法;②学会构建高质量提示词与自定义指令,使AI输出更贴合项目规范;③规避常见使用陷阱,实现安全、可控、高效的AI辅助开发。; 阅读建议:此文档兼具理论指导与实操示范,建议结合实际开发环境边学边练,重点关注提示工程、上下文管理与自定义指令配置,持续迭代优化使用方式,并在团队中建立统一的AI编码规范与审查机制。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧