我尝试使用按钮为DataGrid保存文件,但我不知道如何保存它,用户可以选择保存位置。在代码上也有一些问题。
private void Button_Click_4(object sender, RoutedEventArgs e)
{
var path = @"C:\\Users\\Tiago\\Documents\\Teste\\Save.xml";
if (serializableObject == null) { return; }
try
{
XmlDocument xmlDocument = new XmlDocument();
XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.Serialize(stream, serializableObject);
stream.Position = 0;
xmlDocument.Load(stream);
xmlDocument.Save(path);
stream.Close();
}
}
catch (Exception ex)
{
}
}
这就是我现在所得到的。
答案 0 :(得分:0)
如果您想允许用户选择文件的位置和名称,可以使用SaveFileDialog选项。
以下是一些可以帮助您完成此任务的链接:
MSDN Link_1
MSDN Link_2
Link_3
答案 1 :(得分:0)
using (FileStream fs = new FileStream(path, FileMode.Create)
错过了)
答案 2 :(得分:0)
首先,您的代码末尾缺少}
大括号。这可能会解决一些问题。
其次,请确保serializableObject
事件可以访问您的Button_Click_4
。将serializableObject
设置为字段或属性以进行访问。
选择保存位置使用FileSaveDialog
为用户提供选择保存的位置。
创建一个:
var fileSaveDialog = new FileSaveDialog();
然后显示:
fileSaveDialog.ShowDialog();
然后,您可以使用FileSaveDialog
对象在"保存"点击。
这是一个字符串 - 将path
变量设置为它。
像这样:
var path = fileSaveDialog.FileName;
有关使用FileSaveDialog
的详细教程,请参阅http://www.wpf-tutorial.com/dialogs/the-savefiledialog/。
示例:(在Button_Click_4
事件处理程序中使用此内容)
var saveFileDialog = new SaveFileDialog(); // Create it
System.Windows.Forms.DialogResult result = saveFileDialog.ShowDialog(); // Show the dialog and set a result (bool) to whether the user clicks "Save" or exits out of the dialog
if (result == DialogResult.OK) // If the user clicked "Save"
{
var path = saveFileDialog.FileName; // Set the path to save to
// Use the path variable to save the file to disk using your own code
}
希望这有帮助!
修改强>
不要忘记在代码顶部使用using Microsoft.Win32;
。
另一个编辑:
我已更新代码,将result
指定为System.Windows.Forms.DialogResult
来比较result == DialogResult.OK
。
请参阅:DialogResult.OK on SaveFileDialog not work
答案 3 :(得分:0)
要选择保存位置,您可以使用System.Windows.Forms.FolderBrowserDialog
class。但这是一个WinForm库,因此您需要将System.Windows.Forms
添加到项目引用中。
var dialog = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = dialog.ShowDialog();