Список 2 столбца из openfiledialog пути и имени файла в базу данных - PullRequest
0 голосов
/ 10 января 2019

У меня есть список, который я могу заполнить через openfiledialog, который работает, но не так, как я хочу. Мне нужно 2 столбца в моем списке 1 для filepath и 1 для fileName рядом друг с другом.

также у меня есть другая кнопка, которая вставляет все имена файлов в базу данных, которая также работает, но мне также нужен второй столбец для обновления столбца пути в моей базе данных

Я попытался сделать 2 столбца 1 для имени файла и 1 для пути к файлу, к сожалению, я мог сделать только 1 столбец для моего имени файла.

This is the code for filling in the listbox 

private void btnOpenFiles_Click(object sender, RoutedEventArgs e)
    {

        lbfiles.Items.Clear();
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Multiselect = true;
        openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
        openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        if (openFileDialog.ShowDialog() == true)
        {
            foreach (string filename in openFileDialog.FileNames)

                lbfiles.Items.Add(System.IO.Path.GetFileName(filename));
        }
    }

это код для вставки в базу данных

  private void BtnToDatabase_Click(object sender, RoutedEventArgs e)
    {
        bool dupe = false;
        foreach (String  string2 in lbfiles.Items.Cast<String>().ToList())
        {
            {
                string cat1 = string2.Substring(0, string2.Length);

                using (SqlConnection sqlCon = new SqlConnection(connectionString))
                {
                    String query = "INSERT INTO tblBestanden2 (BestandNaam,toegewezen,Username,Status) VALUES (@BestandNaam, @toegewezen, @username, @Status)";

                    using (SqlCommand command = new SqlCommand(query, sqlCon))
                    {
                        command.Parameters.AddWithValue("@BestandNaam", cat1);
                        command.Parameters.AddWithValue("@toegewezen", "1");
                        command.Parameters.AddWithValue("@username", "");
                        command.Parameters.AddWithValue("@Status", "0");

                        sqlCon.Open();
                        int result = command.ExecuteNonQuery();

                        if (!dupe)
                        {
                            if (result == 0)
                            {
                                sqlCon.Close();
                                MessageBox.Show("error");
                            }
                            else
                            {
                                sqlCon.Close();
                                MessageBox.Show("toegevoegd");
                            }
                            dupe = true;
                        }
                    }
                }
            }
        }
    }

Если по моему вопросу возникнет путаница, пожалуйста, сообщите мне, и я сделаю все возможное, чтобы уточнить

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Создать класс с двумя свойствами:

public class File
{
    public string Name { get; set; }
    public string Path { get; set; }
}

И экземпляры этого к ListBox:

private void btnOpenFiles_Click(object sender, RoutedEventArgs e)
{
    lbfiles.Items.Clear();
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Multiselect = true;
    openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
    openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    if (openFileDialog.ShowDialog() == true)
    {
        foreach (string filename in openFileDialog.FileNames)
            lbfiles.Items.Add(new File() { Name = System.IO.Path.GetFileName(filename), Path = filename });
    }
}

Затем вы получите значения, приведя элементы к File объектам в вашем BtnToDatabase_Click обработчике событий:

private void BtnToDatabase_Click(object sender, RoutedEventArgs e)
{
    bool dupe = false;
    foreach (File file in lbfiles.Items.OfType<File>())
    {
        string name = file.Name;
        string path = file.Path;
                ...
    }
}
0 голосов
/ 10 января 2019

В выражении foreach filepath не включается, когда это условие openFileDialog.ShowDialog() становится истинным, вы получаете только имя файла. Чтобы получить filepath, используйте System.IO.Path.GetFullPath(FileName);, вы можете получить filepath для имени файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...