gpt4 book ai didi

c# - 在 datagridview 中显示 .exe.config 文件并操作设置

转载 作者:数据小太阳 更新时间:2023-10-29 01:52:10 26 4
gpt4 key购买 nike

我正在开发一个 GUI,它能够通过 datagridview 操作 xml 文件并将其保存到用户选择的目标位置。该程序还有一个 .exe.config 文件,我还希望能够在其中自由编辑 datagridview,因为这比让用户手动进入文件并相应地更改值要方便得多。

我试过声明一个数据集,我最初认为 .exe.config 文件只是一个 xml 文件,但这段代码不起作用:

        dataSet1.ReadXml(configpath);
bindingSource1.DataSource = dataSet1.Tables[0];
dataGridView1.DataSource = bindingSource1;

当我运行它时,datagridview 是空的,我确认文件路径是正确的,当我调试代码时没有异常,而对于我在 GUI 中打开的其他 xml 文件,显示的数据工作得很好。也许 readxml() 只支持..合法的 xml 文件而不是 xml 配置文件?我尝试使用谷歌搜索并寻找一些答案,但我得到的只是与通过手动访问 xml 文件和更改值(我已经知道的东西)来更改设置相关的线程。我希望能够让用户对数据做他们想做的事,然后保存它。 .exe.config 设置可能也适用于另一个程序,但它本质上是一个 xml 配置文件。我认为网络上没有太多关于这个特定问题的信息,因为设置通常是静态的,如果它们发生变化,手动操作也很容易。

总结一下,

我正在寻找一种方法能够打开任何 .exe.config 文件,将其显示在数据 GridView 中,允许用户能够操作其中的数据值,然后保存文件,覆盖之前的数据设置。

感谢任何帮助。提前致谢!

  • tf.rz(.NET 3.5 SP1,Visual Studio 2008 C#)

编辑:我将上传我创建的 xml 文件的工作示例:我有点希望程序能够导航到 .exe.config 文件,然后打开它并让它像这样显示在设置名称的位置是列,值位于 datagridview 的单元格中。不幸的是,我不在家里的电脑旁,无法执行此操作。

最佳答案

这是我用来加载和操作配置文件的。您可能希望更改 loadAppSettingsloadConnStrings 方法以满足您的需要。

using System;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;


namespace GenericManagementClasses
{
public class ConfigFile
{
private string m_ConfigFilePath;
private XmlDocument m_XmlDoc;

private FileStream fIn;
private StreamReader sr;
private StreamWriter sw;

private OrderedDictionary m_AppSettings;
private OrderedDictionary m_ConnectionStrings;

private XmlNode m_AppSettingsNode;
private XmlNode m_ConnectionStringsNode;

#region "Properties"
public String Path
{
get
{
return m_ConfigFilePath;
}
}

public OrderedDictionary AppSettings
{
get
{
return m_AppSettings;
}
}

public OrderedDictionary ConnectionStrings
{
get
{
return m_ConnectionStrings;
}
}
#endregion
#region "Constructors"
/// <summary>
/// Default constructor - declared private so that you can't instantiate an empty ConfigFile object
/// <code>ConfigFile cfg = new ConfigFile()</code> will result in a NotImplemented exception
/// </summary>
private ConfigFile()
{
throw new NotImplementedException("No default constructor for the ConfigFile class");
}
/// <summary>
/// Public constructor
/// <example>ConfigFile cfg = new ConfigFile(@"c:\MyApp\MyApp.exe.config");</example>
/// </summary>
/// <param name="ConfigFilePath">The path to the configuration file</param>
public ConfigFile(string ConfigFilePath)
{
//Check to see if the file exists
if (File.Exists(ConfigFilePath)){
//Initialise the XmlDocument to hold the config file
m_XmlDoc = new XmlDocument();
//Store the path to the config file
m_ConfigFilePath = ConfigFilePath;

//FileStream to get the contents out of the file
fIn = new FileStream(m_ConfigFilePath, FileMode.Open, FileAccess.ReadWrite);
//StreamReader to read the FileStream
sr = new StreamReader(fIn);
//StreamWriter to write to the FileStream
sw = new StreamWriter(fIn);

//Try and load the XML from the file stream
try
{
m_XmlDoc.LoadXml(sr.ReadToEnd());
m_AppSettingsNode = m_XmlDoc.GetElementsByTagName("appSettings")[0];
m_ConnectionStringsNode = m_XmlDoc.GetElementsByTagName("connectionStrings")[0];

loadAppSettings();
loadConnStrings();

}
catch (Exception ex)
{
//If it went pear shaped, throw the exception upwards
throw ex;
}

}
else
//If the file doesn't exist, throw a FileNotFound exception
{
throw new FileNotFoundException(ConfigFilePath + " does not exist");
}
}
#endregion

private void loadAppSettings()
{
m_AppSettings = new OrderedDictionary();
XmlNodeList nl = m_AppSettingsNode.SelectNodes("add");
foreach (XmlNode node in nl)
{
m_AppSettings.Add(node.Attributes["key"].Value, node.Attributes["value"].Value);
}
}

private void loadConnStrings()
{
m_ConnectionStrings = new OrderedDictionary();

XmlNodeList nl = m_ConnectionStringsNode.SelectNodes("add");
foreach (XmlNode node in nl)
{
m_ConnectionStrings.Add(node.Attributes["name"].Value, node.Attributes["connectionString"].Value);
}
}

public void setAppSetting(string name, string newValue)
{
if (!m_AppSettings.Contains(name))
{
throw new Exception(String.Format("Setting {0} does not exist in {1}", name, m_ConfigFilePath));
}
else
{
m_AppSettings[name] = newValue;
m_XmlDoc.SelectSingleNode(String.Format(@"//appSettings/add[@key='{0}']",name)).Attributes["value"].Value = newValue;
fIn.SetLength(0);
sw.Write(m_XmlDoc.InnerXml);
sw.Flush();
}

}
#region "Static Methods"
/// <summary>
/// Static method to return a ConfigFile object
/// <example>ConfigFile cfg = ConfigFile.LoadConfigFile(@c:\MyApp\MyApp.exe.config");"</example>
/// </summary>
/// <param name="ConfigFilePath">Path to the configuration file to load</param>
/// <returns></returns>
public static ConfigFile LoadConfigFile(string ConfigFilePath)
{
return new ConfigFile(ConfigFilePath);
}
#endregion
}
}

关于c# - 在 datagridview 中显示 .exe.config 文件并操作设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com