Столбец кнопки DataGridView для удаления - PullRequest
0 голосов
/ 05 июля 2018

У меня проблема с моим представлением данных, когда при первом запуске кнопка удаления находится в последнем столбце, но каждый раз, когда я нажимаю кнопку удаления или добавления и вызываю эту функцию printdataview (). Кнопка находится на первый столбец

Эта функция сначала вызывается в Form1 (), затем вызывается каждый раз, я удаляю запись или добавляю запись. Я использую XML для хранения данных и добавления и удаления записей в соответствии с этим, printdataview () просто обновляет данные на нем ... и каким-то образом это портит, даже длина столбца теряется при первой инициализации просмотра данных и после.

Спасибо. Ценю обратную связь.

 private void PrintDataView()
    {
        // clears the old data and repopulate it.
        C_DB.DataSource = null;

        XmlReader xmlFile;
        xmlFile = XmlReader.Create(filename, new XmlReaderSettings());

            DataSet ds = new DataSet();
            ds.ReadXml(xmlFile);

            if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0){

            DataView dv = new DataView(ds.Tables[0]);


                // first adds all rows after sorting today's list into datagridview
                string Search = DateTime.Today.ToShortDateString();
                dv.RowFilter = "DateTime LIKE '%" + Search + "%'";
                dv.Sort = "DateTime ASC";

                C_DB.DataSource = dv;


                // then add the delete button if there is more than one row

                if (dv.Count > 0 && C_DB.ColumnCount != 7 && C_DB.RowCount > 0)
                {
                    // add button
                    DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
                    C_DB.Columns.Add(btn);
                    btn.HeaderText = "Delete Row";
                    btn.Text = "Delete";
                    btn.Name = "btn";
                    btn.UseColumnTextForButtonValue = true;
                }


                // This scrolls to bottom
                if (C_DB.RowCount > 10)
                {
                    C_DB.FirstDisplayedScrollingRowIndex = C_DB.RowCount - 1;
                }


            }
            else
            {
                C_ErrorMessage.Text = "No Data Found";

            }
            C_DB.Refresh();
            xmlFile.Close();

    }

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Обратите внимание, что это не полное решение.

Проблема, с которой вы столкнулись, заключается в том, что кнопка «Удалить» появляется в конце списка столбцов только первый раз, а затем меняет позицию на первую, потому что, когда вы добавили кнопку, выполнив метод PrintDataView(), вы не указали ее положение в DataGridView. Используйте что-то вроде этого:

 //Your code
 C_DB.Columns.Add(btn);
 btn.HeaderText = "Delete Row";
 btn.Text = "Delete";
 btn.Name = "btn";
 btn.UseColumnTextForButtonValue = true;
 //Set the desired button position here
 C_DB.Columns[btn.Name].DisplayIndex = 5; //Whatever value you want starting from zero

Для получения дополнительной информации. см: Полный пример на MS Site

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

Размер столбца DGV

0 голосов
/ 05 июля 2018

Н.В.М., я понял, что не так.

Вместо

// очищает старые данные и снова заполняет их.

C_DB.DataSource = null;

// Я изменил его на

C_DB.Columns.Clear ();

Видимо, обнуление источника данных не очищает структуру от ранее.

Это также исправило ширину моего столбца .. которую я установил позже

Спасибо.

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