2012-11-12 2 views
0

열과 행이있는 격자가 있습니다. x 개의 항목을 알면 xaml에 아무 문제없이 추가 할 수 있습니다. 유감스럽게도 필자는 SP를 실행할 때 얻을 수있는 x 항목을 기준으로 항목을 채우려고하기 때문에 프로그램으로 listview를 만들고 싶습니다. 여기 내 xaml입니다. 이 레이블은 SP 결과에서 주어진 내용을 할당하기위한 것입니다. 누군가가 이것을 어떻게 프로그래밍 방식으로 만드는 지 보여 줄 수 있습니까?그리드에 listview를 프로그래밍 방식으로 작성하는 방법

<Grid Name="grdItems" Width="939" Grid.Row="1" HorizontalAlignment="Left" DataContext="{Binding}" Margin="5"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="25"></RowDefinition> 
     <RowDefinition Height="auto"></RowDefinition> 
     <RowDefinition Height="5"></RowDefinition> 
     <RowDefinition Height="25"></RowDefinition> 
     <RowDefinition Height="auto"></RowDefinition> 
     <RowDefinition Height="5"></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="231"></ColumnDefinition> 
     <ColumnDefinition Width="5"></ColumnDefinition> 
     <ColumnDefinition Width="231"></ColumnDefinition> 
     <ColumnDefinition Width="5"></ColumnDefinition> 
     <ColumnDefinition Width="231"></ColumnDefinition> 
     <ColumnDefinition Width="5"></ColumnDefinition> 
     <ColumnDefinition Width="231"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <Label Name="lblItem" Grid.Row="0" Grid.Column="0" Content="item label" /> 
    <ListView Name="lstFirstItem" HorizontalAlignment="Left" VerticalAlignment="Top" 
        Height="auto" Margin="0,0,0,0" ItemsSource="" FontWeight="Regular" 
        Grid.Column="0" Grid.Row="1"> 
     <ListView.View> 
      <GridView> 
       <GridView.ColumnHeaderContainerStyle> 
        <Style> 
         <Setter Property="FrameworkElement.Visibility" Value="Collapsed"/> 
        </Style> 
       </GridView.ColumnHeaderContainerStyle> 
       <GridViewColumn Width="58" DisplayMemberBinding="{Binding ItemName}"></GridViewColumn> 
       <GridViewColumn Width="174.25" DisplayMemberBinding="{Binding ItemDescription}"></GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

답변

2

코드에서 동적으로 행이나 열을 추가 할 수 있습니다.

중위 추가 할 행 :

GridLength rowheight = new GridLength(100); //your own value we can give *,Auto as well 
    RowDefinition rowDef = new RowDefinition {Height = rowheight };  
    mainGrid.RowDefinitions.Add(rowDef); 

중위가 된 colomns를 추가합니다 :

GridLength columnwidth = new GridLength(100);   
    ColumnDefinition colDef = new ColumnDefinition { Width = columnwidth};   
    mainGrid.ColumnDefinitions.Add(colDef);  

중위는 특정 행에있는 TextBlock을 추가, 열

TextBlock textBlock = new TextBlock();   
    textBlock.Text = "Some Value";  
    Grid.SetRow(textBlock, rowNum);   
    Grid.SetColumn(textBlock, colNum); 
    mainGrid.Children.Add(textBlock); 

희망이 귀하의 질문에 대한 대답

+0

감사합니다. – Calvin

0

나를 위해 완벽하게 작동하는이 작업은 다음과 같습니다.

 ListView Lv_Report = new ListView(); 
     Lv_Report.Name = "Lv_Report"; 
     Lv_Report.FontSize = 14; 
     Lv_Report.Height = 300; 
     Lv_Report.Width = 800; 
     Canvas.SetTop(Lv_Report, 10); 
     Canvas.SetLeft(Lv_Report, 30); 
     Cv_Scheduler.Children.Add(Lv_Report); 
     Lv_Report.Background = null; 


     LinearGradientBrush myLinearGradientBrush = new LinearGradientBrush(); 
     myLinearGradientBrush.StartPoint = new System.Windows.Point(0, 0); 
     myLinearGradientBrush.EndPoint = new System.Windows.Point(0, 1); 
     Color color = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#7FFFFFFF"); 
     myLinearGradientBrush.GradientStops.Add(new GradientStop(color, 0.02)); 
     color = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#BFBADF69"); 
     myLinearGradientBrush.GradientStops.Add(new GradientStop(color, 0.19)); 
     color = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#7FF9FCF2"); 
     myLinearGradientBrush.GradientStops.Add(new GradientStop(color, 1)); 
     color = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#BEB9DE67"); 
     myLinearGradientBrush.GradientStops.Add(new GradientStop(color, 0.83)); 
     Style style = new Style(typeof(GridViewColumnHeader)); 
     style.Setters.Add(new Setter() 
     { 
      Property = GridViewColumnHeader.BackgroundProperty, 
      Value = myLinearGradientBrush 
     }); 

     var Lvitems = new List<string>(); 
      Lvitems.Add("WorkOrder"); 
      Lvitems.Add("Module1"); 

     GridView Gv = new GridView(); 

     foreach (String item in Lvitems) 
     { 
      DataTemplate Dtemplate = new DataTemplate(); 
      var markup = 

      "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:local=\"clr-namespace:SubMeteringElectric;assembly=SubMeteringElectric\">" 
      + "<StackPanel>" 
      + "<Label Content =\"{Binding Lv_RSH_" + item + "}\" Width = \"100\" Height = \"30\" HorizontalContentAlignment = \"Center\" FontSize = \"14\" />" 
      + "</StackPanel>" 
      + "</DataTemplate>"; 

      byte[] byteArray = Encoding.UTF8.GetBytes(markup); 
      MemoryStream stream = new MemoryStream(byteArray); 

      Dtemplate = (DataTemplate)XamlReader.Load(stream); 

      GridViewColumn Gvc_item = new GridViewColumn(); 
      Gvc_item.Header = item; 
      Gvc_item.Width = 150; 

      Gvc_item.CellTemplate = Dtemplate; 


      Gv.Columns.Add(Gvc_item); 
     } 

     Gv.ColumnHeaderContainerStyle = style; 
     Lv_Report.View = Gv; 
    } 
+0

이 코드는 문제를 해결하는 데 도움이 될 수 있지만 _why_ 및/또는 _how_가 질문에 대답하는 것은 설명하지 않습니다. 이러한 추가적인 맥락을 제공하면 장기적인 교육적 가치가 크게 향상 될 것입니다. 어떤 제한 사항 및 가정이 적용되는지를 포함하여 설명을 추가하기 위해 답을 [편집하십시오]. –

관련 문제