使用AdvancedDataGridView列筛选如何保留单元格与文本颜色信息
开发场景与现存问题
- 项目开发环节使用AdvancedDataGridView控件,已实现右键菜单自定义目标单元格背景色、单元格文本显示颜色的功能
- 启用列筛选功能后,所有已配置的自定义颜色信息会完全丢失;即便后续移除全部筛选条件,之前设置的颜色也无法恢复到对应单元格位置
- 目前已开发对应工具类,用于在应用启动、退出阶段分别加载、保存DataGridView(DGV)的颜色配置,核心实现代码如下:
public static void WriteDataGridViewSettings(System.Windows.Forms.DataGridView dgv) { XmlTextWriter writer = new XmlTextWriter(Application.StartupPath + @"\MyGridColor.xml", null); writer.WriteStartDocument(); writer.WriteStartElement(dgv.Name); int LastRow = dgv.Rows.Count; for (int i = 0; i < LastRow; i++) { writer.WriteStartElement("Row"); writer.WriteStartElement("CellColor"); writer.WriteString(dgv.Rows[i].DefaultCellStyle.BackColor.ToArgb().ToString()); writer.WriteEndElement(); writer.WriteStartElement("TextColor"); writer.WriteString(dgv.Rows[i].DefaultCellStyle.ForeColor.ToArgb().ToString()); writer.WriteEndElement(); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndDocument(); writer.Close(); } public static void ReadDataGridViewSettings(System.Windows.Forms.DataGridView dgv) { XmlDocument xmldoc = new XmlDocument(); XmlNodeList xmlnode; FileStream fs = new FileStream(Application.StartupPath + @"\MyGridColor.xml", FileMode.Open, FileAccess.Read); xmldoc.Load(fs); xmlnode = xmldoc.GetElementsByTagName("Row"); for (int i = 0; i <= xmlnode.Count-1; i++) { int cellcolor = int.Parse(xmlnode[i].ChildNodes.Item(0).InnerText.Trim()); int textcolor = int.Parse(xmlnode[i].ChildNodes.Item(1).InnerText.Trim()); if (cellcolor != 0) { dgv.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(Convert.ToInt32(cellcolor)); dgv.Rows[i].DefaultCellStyle.ForeColor = Color.FromArgb(Convert.ToInt32(textcolor)); } else { dgv.Rows[i].DefaultCellStyle.BackColor = Color.White; dgv.Rows[i].DefaultCellStyle.ForeColor = Color.Black; } } fs.Close(); }
现有持久化逻辑的衍生故障
受列筛选触发样式丢失的问题影响,用户使用筛选功能后直接退出应用时,工具类会将已经丢失自定义颜色的网格状态写入配置文件,导致此前手动设置的所有自定义颜色信息被永久覆盖丢失。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

