Проблемы с DataGridView - PullRequest
       9

Проблемы с DataGridView

1 голос
/ 08 июля 2010

Я пытаюсь перебрать циклы foreach и выложить вывод в мое представление данных.

Представление таблицы данных имеет 3 определенных столбца: путь, старое имя файла, новое имя файла

Однако я продолжаю сталкиваться с ошибками.

Во-первых, вот код:

public partial class SanitizeFileNames : Form
{

    public SanitizeFileNames()
    {
        InitializeComponent();
    }

    public void Sanitizer(List<string> paths)
    {
    string regPattern = (@"[~#&!%+{}]+");
        string replacement = "";

        Regex regExPattern = new Regex(regPattern);
        List<string> existingNames = new List<string>();

        StreamWriter errors = new StreamWriter(@"C:\Documents and Settings\bob.smith\Desktop\SharePointTesting\Errors.txt", true);
        StreamWriter resultsofRename = new StreamWriter(@"C:\Documents and Settings\bob.smith\Desktop\SharePointTesting\Results of File Rename.txt", true);

        dataGridView1.Rows.Clear();
        var filesCount = new Dictionary<string, int>();


           try
            {

              foreach (string files2 in paths)
              {

                string filenameOnly = Path.GetFileName(files2);
                string pathOnly = Path.GetDirectoryName(files2);
                string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement);
                string sanitized = Path.Combine(pathOnly, sanitizedFileName);


                if (!System.IO.File.Exists(sanitized))
                {
                    System.IO.File.Move(files2, sanitized);
                    DataGridViewRow dgr2 = new DataGridViewRow();
                    dgr2.Cells[0].Value = pathOnly;
                    dgr2.Cells[1].Value = filenameOnly;
                    dgr2.Cells[2].Value = sanitized;
                    resultsofRename.Write("Path: " + pathOnly + "\r\n" + "Old File Name: " + filenameOnly + "\r\n" + "New File Name: " + sanitized + "\r\n" + "\r\n");

                }

                else
                {
                    if (filesCount.ContainsKey(sanitized))
                    {
                        filesCount[sanitized]++;
                    }
                    else
                    {
                        filesCount.Add(sanitized, 1);
                    }
                    string newFileName = String.Format("{0}{1}{2}",
                    Path.GetFileNameWithoutExtension(sanitized),
                    filesCount[sanitized].ToString(),
                    Path.GetExtension(sanitized));
                    string newFilePath = Path.Combine(Path.GetDirectoryName(sanitized), newFileName);
                    System.IO.File.Move(files2, newFilePath);
                    DataGridViewRow dgr2 = new DataGridViewRow();
                    dgr2.Cells[0].Value = pathOnly;
                    dgr2.Cells[1].Value = filenameOnly;
                    dgr2.Cells[2].Value = newFileName;
                    resultsofRename.Write("Path: " + pathOnly + "\r\n" + "Old File Name: " + Path.GetFileNameWithoutExtension(files2) + "\r\n" + "New File Name: " + newFileName + "\r\n" + "\r\n");
                }
               }
              }
            catch (Exception e)
            {

             errors.Write(e);

            }





    }

    private void SanitizeFileNames_Load(object sender, EventArgs e)
    {

    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

}

Прежде всего, я новичок в C #, поэтому я даже не уверен на 100%, что это правильно. Этот код берет пути, которые передаются из другого метода, и «очищает» имена файлов, удаляя недопустимые символы (как определено в моем шаблоне регулярных выражений). Если имя файла уже существует, добавьте к имени файла число, которое увеличивается постепенно (т. Е. ~ Test.txt и% test.txt будут переименованы в test.txt. С моим кодом, ~ test.txt становится test.txt и% test.txt становится test1.txt). Я пытаюсь в основном добавить эти данные в мое представление данных (если файл перейдет в другой цикл if (filesCount.ContainsKey (sanitized)).

Я получаю ошибки с Path.GetFileNameWithoutExtension (), Path.GetExtension (), Path.Combine (), Path.GetDIrectoryName (). Ошибка выглядит следующим образом:

'System.Windows.Forms.DataGridViewTextBoxColumn' не содержит определения для GetFileName и метод расширения GetFileName принимает первый аргумент типа 'System.Windows.Forms.DataGridViewTextBoxColumn' может быть найден (вы пропускаете используя директиву или сборку ссылка?)

Понятия не имею, что это значит или как это исправить. Может кто-нибудь помочь?

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

Я подозреваю, что у вас есть переменная / поле DataGridViewTextBoxColumn где-то с именем 'Path'.Переименуйте эту переменную и / или используйте полное имя System.IO.Path.GetFileName() и т. Д.

В качестве более общего замечания прекратите использование DatagridView в качестве структуры данных.Сделайте себе одолжение, определите класс с нужными вам свойствами (столбца), объявите BindingList<MyFileClass> и привяжите DataGridView к этому списку.

0 голосов
/ 08 июля 2010

Пример:

public ArrayList GetSelectedRows(DataGrid datagrid)
{
ArrayList arrSelectedRows = new ArrayList();
DataSet dset = (DataSet)datagrid.DataSource;
for (int i=0; i<dset.Tables[0].Rows.Count; i++)
{
if (datagrid.IsSelected(i))
{
DataRow drow = dset.Tables[0].Rows[i];
arrSelectedRows.Add(drow);
}
}
return arrSelectedRows;
}

Это должно получить вас, если вы хотите пойти ... хотя, очевидно, не совсем то, что вы хотели после.

This should get you were you want to go...though, obviously not quite like what you were after either.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...