单击按钮为 DataGridView 添加多个附件
Adding Multiple attachments for a DataGridView with Button Click
我编写了这段代码,用于通过单击按钮向 datagridview 添加多个附件,但我一次只能添加一个附件。单击下一个按钮不会添加多个附件,请提供解决方案,
谢谢
这是我试过的代码
OpenFileDialog ofdialog = new OpenFileDialog();
ofdialog.Multiselect = true;
DataTable dt = new DataTable();
dt.Columns.Add("Attachments");
var res = ofdialog.ShowDialog();
string[] filename = ofdialog.FileNames;
string[] sfilename = ofdialog.SafeFileNames;
foreach (string fn in filename)
{
dt.Rows.Add(fn);
}
dataGridView1.DataSource = dt.DefaultView;
dataGridView1.Columns["Attachments"].Width = 500;
最后一行的断点(来自评论):嗯,当然这不能解决问题,但现在您知道 DataTable
本身是错误的。现在 向上 您的带有断点的代码。您可以在 DataTable dt = new DataTable();
行上设置它并查看上面的行,当悬停在 ofdialog
上方时,查看它在 FileNames
.
中的文件集合
使用 OpenFileDialog1.Multiselect = True
时,您得到的文件数应该等于您在 OpenFileDialog
中选择的文件数。
下一个候选是 filename
数组,断点在 foreach
上,检查此数组中的项目数。
这是我用来比较的代码:
C#(已转换):
OpenFileDialogDXF.Title = "Choose your files";
OpenFileDialogDXF.InitialDirectory = @"C:\users\XXXXX\Documents\";
OpenFileDialogDXF.Filter = "DXF Files|*.dxf";
OpenFileDialogDXF.Multiselect = true;
if (OpenFileDialogDXF.ShowDialog() == DialogResult.OK)
{
for (var ir = 0; ir <= OpenFileDialogDXF.FileNames.Count - 1; ir++)
LoadDXF(OpenFileDialogDXF.FileNames(ir));
}
VB.NET:
Private Sub BtnOpenDxf_Click(sender As Object, e As EventArgs) Handles BtnOpenDxf.Click
OpenFileDialogDXF.Title = "Choose your files"
OpenFileDialogDXF.InitialDirectory = "C:\users\XXXXX\Documents\"
OpenFileDialogDXF.Filter = "DXF Files|*.dxf"
OpenFileDialogDXF.Multiselect = True
If OpenFileDialogDXF.ShowDialog() = DialogResult.OK Then
For ir = 0 To OpenFileDialogDXF.FileNames.Count - 1
Call LoadDXF(OpenFileDialogDXF.FileNames(ir))
Next
End If
其中 LoadDXF
是我处理每个文件的自定义子程序。
编辑:
想想你的代码,如果 OpenFileDialog
得到多个结果,我会在这一行寻找问题:
string[] filename = ofdialog.FileNames;
可能需要一些转换,例如 .ToArray()
。
我编写了这段代码,用于通过单击按钮向 datagridview 添加多个附件,但我一次只能添加一个附件。单击下一个按钮不会添加多个附件,请提供解决方案,
谢谢
这是我试过的代码
OpenFileDialog ofdialog = new OpenFileDialog();
ofdialog.Multiselect = true;
DataTable dt = new DataTable();
dt.Columns.Add("Attachments");
var res = ofdialog.ShowDialog();
string[] filename = ofdialog.FileNames;
string[] sfilename = ofdialog.SafeFileNames;
foreach (string fn in filename)
{
dt.Rows.Add(fn);
}
dataGridView1.DataSource = dt.DefaultView;
dataGridView1.Columns["Attachments"].Width = 500;
最后一行的断点(来自评论):嗯,当然这不能解决问题,但现在您知道 DataTable
本身是错误的。现在 向上 您的带有断点的代码。您可以在 DataTable dt = new DataTable();
行上设置它并查看上面的行,当悬停在 ofdialog
上方时,查看它在 FileNames
.
使用 OpenFileDialog1.Multiselect = True
时,您得到的文件数应该等于您在 OpenFileDialog
中选择的文件数。
下一个候选是 filename
数组,断点在 foreach
上,检查此数组中的项目数。
这是我用来比较的代码:
C#(已转换):
OpenFileDialogDXF.Title = "Choose your files";
OpenFileDialogDXF.InitialDirectory = @"C:\users\XXXXX\Documents\";
OpenFileDialogDXF.Filter = "DXF Files|*.dxf";
OpenFileDialogDXF.Multiselect = true;
if (OpenFileDialogDXF.ShowDialog() == DialogResult.OK)
{
for (var ir = 0; ir <= OpenFileDialogDXF.FileNames.Count - 1; ir++)
LoadDXF(OpenFileDialogDXF.FileNames(ir));
}
VB.NET:
Private Sub BtnOpenDxf_Click(sender As Object, e As EventArgs) Handles BtnOpenDxf.Click
OpenFileDialogDXF.Title = "Choose your files"
OpenFileDialogDXF.InitialDirectory = "C:\users\XXXXX\Documents\"
OpenFileDialogDXF.Filter = "DXF Files|*.dxf"
OpenFileDialogDXF.Multiselect = True
If OpenFileDialogDXF.ShowDialog() = DialogResult.OK Then
For ir = 0 To OpenFileDialogDXF.FileNames.Count - 1
Call LoadDXF(OpenFileDialogDXF.FileNames(ir))
Next
End If
其中 LoadDXF
是我处理每个文件的自定义子程序。
编辑:
想想你的代码,如果 OpenFileDialog
得到多个结果,我会在这一行寻找问题:
string[] filename = ofdialog.FileNames;
可能需要一些转换,例如 .ToArray()
。