2012-05-24 3 views
0

У меня есть сетка, строки которой & cols динамически заполняются. Чтобы удалить строку, я использую следующий код:Неожиданные результаты при удалении строки из сетки

seivesTorGrid.RowDefinitions.RemoveAt(rowIndex+1); 

Все делается только вручную. Результаты операций после удаления строки не является удовлетворительным: enter image description here

Defination из сетки в XML является:

<Grid Name="seivesTorGrid" ShowGridLines="False" Margin="10, 0, 10, 0" 
        Width="Auto" Height="Auto" > 

       <Grid.ColumnDefinitions> </Grid.ColumnDefinitions> 

       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" MinHeight="25"/> 
       </Grid.RowDefinitions> 
      </Grid> 

Это, как я добавить Cols & Row к сетке:

 private void AddColumns() 
    { 
     ColumnDefinition newCol = new ColumnDefinition(); 
     //newCol.Width = GridLength.Auto; 
     newCol.MinWidth = 50; 
     newCol.MaxWidth = 150; 
     seivesTorGrid.ColumnDefinitions.Add(newCol); 

     GridViewColumnHeader gch = new GridViewColumnHeader(); 
     gch.Content = "ID"; 
     gch.FontSize = 12; 

     Grid.SetColumn(gch, 0); 
     seivesTorGrid.Children.Add(gch); 

     for (int i = 0; i < GlobalUtils.TOR_List.Count; i++) 
     { 
      newCol = new ColumnDefinition(); 
      newCol.Width = GridLength.Auto; 
      newCol.MinWidth = 80; 
      newCol.MaxWidth = 150;     
      seivesTorGrid.ColumnDefinitions.Add(newCol); 

      gch = new GridViewColumnHeader(); 
      gch.Content = GlobalUtils.TOR_List[i].TOR_Id; 
      gch.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center; 
      gch.VerticalContentAlignment = System.Windows.VerticalAlignment.Center; 
      gch.FontSize = 12; 

      Grid.SetColumn(gch, i + 1); 
      seivesTorGrid.Children.Add(gch);     
     } 

    } 

    private void AddRowToGrid(String id) 
    { 
     RowDefinition newRow = new RowDefinition(); 

     seivesTorGrid.RowDefinitions.Add(newRow); 
     int rowIndex = seivesTorGrid.RowDefinitions.Count - 1; 

     TextBlock idTB = new TextBlock(); 
     idTB.Text = id; 
     idTB.TextAlignment = TextAlignment.Left; 
     idTB.VerticalAlignment = System.Windows.VerticalAlignment.Center; 

     Grid.SetColumn(idTB, 0); 
     Grid.SetRow(idTB, rowIndex); 
     seivesTorGrid.Children.Add(idTB); 

     for (int i = 1; i < 3; i++) 
     { 
      Button tempBtn = new Button() { 
       Height=25, 
       Width=80, 
       Margin = new Thickness(5), 
       Content = "Add", 
       Background = Brushes.Brown, 
       Tag = rowIndex 
      }; 

      tempBtn.Click += OnIdButtonClick; 

      Grid.SetColumn(tempBtn, i); 
      Grid.SetRow(tempBtn, rowIndex);     
      seivesTorGrid.Children.Add(tempBtn); 
     }      
    } 

Почему результат после удаления строки неправильный? Что нужно исправить?

Любая помощь очень ценится.

ответ

1

Вам, конечно же, также придется удалить всех детей из этой строки.

Это означает, что все элементы из коллекции seivesTorGrid.Children, где Grid.GetRow() возвращает индекс, который необходимо удалить.