2017-01-14 3 views
-1

У меня проблема. Давайте объясним это: Я создаю переменную DataTable 'DataT' и добавляю строку к этой переменной.SameTime у меня есть datagridview. После того, как я оценил DataT для свойства DataSource DataGridView. Я получаю свойство DataT. Rows.Count. Это значение 10. Но это значение уменьшается с 10 до 5, когда я удаляю 5 строк DataGridView. Итак, почему уменьшите мое значение, я просто удаляю строки DataGridView, но я не удалял строки «DataT», хотя количество строк «DataT» уменьшается с 10 до 5. Я не решу эту проблему.Назначение и привязка

EDIT: Да я связан datatable.But же проблемы есть другие state объяснить с примером:

DataTable Table1 = new DataTable(); 
DataTable Table2 = new DataTable(); 
DataRow Rows; 

private void Form1_Load(.......) 
{ 
    Tablo1.Columns.Add("Column1"); 
    Tablo1.Columns.Add("Column2"); 

    Rows = Table1.NewRow(); 
    Rows[0] = "Hello"; 
    Rows[1] = "Word"; 
    Table1.Rows.Add(Rows); 

    Rows = Table1.NewRow(); 
    Rows[0] = "Hello"; 
    Rows[1] = "Word"; 

    Table1.Rows.Add(Rows); 

    Table2 = Table1; 
    datagridview1.DataSource = Table1;  
    //This datagridview1 has 2 Rows and Table1 has 2 Rows. 

    datagridview1.Rows.RemoveAt(0); 
    //I am Removing one Row of datagridview1.Not from Table1. 

    //But Automatic removing Rows from Table1. 
    //Result=datagridview1 has 1 Row and Table1 has 1 Row.Why do remove rows from Table1? 
    //Even Rows Remove from Table2 when i remove rows from datagridview1.  
} 
+0

Это действительно непонятно, что вы делаете, в чем проблема, или то, что вы пытались делать, чтобы решить эту проблему. Тем более, что кода нет, чтобы проиллюстрировать его. – UnholySheep

+1

Как удалить строки из DataGridView? Если он привязан к DataTable, это связывание работает в обоих направлениях. –

+0

???? Что общего с DataGridView/DataTable с байтом []. –

ответ

1

Как Henk Holterman указывался в comment есть две причины, что делает Table2 для изменения

  • с Table1 используется как DataSource для сетки любые изменения в сетке будут отражены в нем. Это ожидаемое поведение GridView.

    GridView имеет свою собственную коллекцию Rows, которая обновляется при установке DataSource. Любые изменения в коллекции Rows (например, удаление предмета) применяются к DataTable, установленным в качестве источника данных. В результате datagridview1.Rows.RemoveAt(0); фактически косвенно удаляет строку с объекта, на который ссылается Table1.

  • Оба ваших переменных (Table1 и Table2) указывают на тот же объект - так всякий раз, когда что-то происходит с DataTable (т.е. строки удалены GridView) изменение видна при проверке либо переменных.

    После кода выполняет «неполную копию», когда вы, кажется, ожидают полный клон похож на поведение int:

    Table2 = Table1; 
    

    После этого присвоения как Table1 и Table2 относятся к DataTable созданных на DataTable Table1 = new DataTable(); линии.

    Подробнее What is the difference between a deep copy and a shallow copy?

+0

Я благодарю вас за помощь и комментарий. Я изучаю эти методы копирования. «Мелкая и глубокая копия». – Michealon

+1

Глубокая/Неглубокая копия на самом деле не является основной проблемой здесь. Речь идет о привязке данных.GridView создает собственную коллекцию Rows (глубокая копия). –

+0

Не могли бы вы объяснить немного больше? Я привязываю, просто делаю ассимиляцию. Так как же я привязываю? – Michealon