我试图创建一个Autocad插件来预览datagridview中的缩略图
我有两个列表框我想将它们绑定在一起并在datagridview中显示.bmp
我成功地想出了第一个问题
String[] dirs = System.IO.Directory.GetDirectories(@"D:\test\Blocks");
int i;
for (i = 0; i < dirs.Length; i++)
{
listBox1.Items.Add(Path.GetFileName(dirs[i]));
}
String[] files = System.IO.Directory.GetFiles(@"D:\test\Blocks");
for (i = 0; i < files.Length; i++)
{
listBox1.Items.Add(Path.GetFileName(files[i]));
}
答案 0 :(得分:1)
如果我理解正确,第一个列表框会列出子文件夹,当选择一个子文件夹时,第二个列表框会显示所选项目的子文件夹,当选择其中一个子文件夹时,datagridview会显示该文件夹中的文件。
如果这是正确的,一种方法是在Form_Load事件中将listbox1的数据源设置为根目录。然后在该列表框的SelectedIndexChanged事件中,您可以将listbox2的数据源设置为listbox1中选择的项目。在listbox2的SelectedIndexChanged事件中,您可以将DataGridView的数据源设置为listbox2中选定的项目。
这样的事情:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string rootDirectory = @"D:\test\Blocks";
private void Form1_Load(object sender, EventArgs e)
{
listBox1.DataSource = Directory.GetDirectories(rootDirectory)
.Select(Path.GetFileName).ToList();
listBox1.SelectedIndexChanged += ListBox1_SelectedIndexChanged;
listBox2.SelectedIndexChanged += ListBox2_SelectedIndexChanged;
}
private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var parentDir = Path.Combine(rootDirectory, listBox1.SelectedItem.ToString());
listBox2.DataSource = Directory.GetDirectories(parentDir)
.Select(Path.GetFileName).ToList();
}
private void ListBox2_SelectedIndexChanged(object sender, EventArgs e)
{
var parentDir = Path.Combine(rootDirectory, listBox1.SelectedItem.ToString(),
listBox2.SelectedItem.ToString());
dataGridView1.DataSource = Directory.GetFiles(parentDir)
.Select(f => new { FileName = Path.GetFileName(f) }).ToList();
}
}