<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [WPF 一問一答] WPF DataGrid 如何增加列?

      問:

      WPF的項目,客戶希望給DataGrid添加列(當然,也要能添加行了),而且不是只添一次,而是不斷的增加列。例如,現有的列名是“規則一”、“規則二”,他們希望能夠不斷添加新的規則(每按一次鍵添加新的一列),然后再在DataGrid里輸入、修改。就是要像Access一樣。

      一般的DataGrid是綁定到指定的ObservableCollection, 而每一列實際是綁定到the property of the data source. 像現在這樣的要求,該如何綁定才行呢?

      我試著先把數據放到一個DataTable里,然后DataGrid binding to this DataTable,make "AutomaticGenerateColumn = True"。然后每次用戶選擇添加,就添加到DataTable里,希望DataGrid能根據DataTable的變化自動產生新列,但是DataGrid不能自動更新,不知道為什么,另外這種在中間加DataTable的辦法好像也不是太好,希望能找到更聰明點的辦法。

      [原帖:http://social.microsoft.com/Forums/zh-CN/wpfzhchs/thread/69ac1292-9512-4bd3-b691-795f64cb0aa0]

       

      ----------------------------------

      答:

      WPF中所有的ItemsControl只支持一維的數據結構,簡單理解,我們的ListBox,ListView, ComboBox, 甚至DataGrid 都是僅支持一個維度的集合。這里你要問了,為啥DataGrid有行和列? 其實我們是這么設計的,一個維度嵌套在另一個維度中,就能夠形成二維的集合結構,但是對于DataGrid來說,對于他能夠直接操作的還是第一維的DataGridRow。 我們集合中每一行元素或者講每一個元素都是會被一個 DataGridRow包裝好放入DataGrid。 然后在DataGridRow還會有進一步的每個元素的各個屬性的包裝 DataGridCell。 為什么我要講這個,是因為我要告訴你,在WPF中,一旦這個DataGrid顯示出來的,他的可視樹中是根本沒有所謂列的概念的,他的可視樹里面只有行和單元格的概念。所以你的第一個問題,要動態添加列,只有在DataGrid沒有顯示前增加,即在DataGrid的邏輯樹里面增加。 或者我們可以動態增加DataGrid所綁定的DataTable的列,然后重新設置DataGrid的綁定,讓DataGrid重新根據數據源來自動生成列。

      所以,我上面已經回答了你的 “一般的DataGrid是綁定到指定的ObservableCollection, 而每一列實際是綁定到the property of the data source. 像現在這樣的要求,該如何綁定才行呢?” 這個問題,是不能實現的。WPF中的DataGrid在綁定后顯示出來了,就不能再加列了,每個明確的類型的屬性是不能隨意增加的。

      除非,你的ObservableCollection集合里面是一個dynamic類型,他可以動態的添加屬性,這種類型你可以添加好類型之后,重新設置DataGrid的ItemsSource綁定即可(注:此方法只能用在WPF 4 .Net 4 Framework里面,參考此文:http://blogs.msdn.com/b/llobo/archive/2009/11/02/new-wpf-feature-binding-to-dynamic-objects.aspx

      代碼片段:

       

          ObservableCollection<dynamic> items = new ObservableCollection<dynamic>();
          public MainWindow()
          {
            InitializeComponent();
       
            for (int i = 0; i < 5; i++)
            {
              dynamic item = new DynamicObjectClass();
              item.A = "Property A value - " + i.ToString();
              item.B = "Property B value - " + i.ToString();
              items.Add(item);
            }
       
            dataGrid.Columns.Add(new DataGridTextColumn() {Header="A", Binding = new Binding("A") });
            dataGrid.Columns.Add(new DataGridTextColumn() {Header="B", Binding = new Binding("B") });
            dataGrid.ItemsSource = items;
          }
       
          private void AddData_Click(object sender, RoutedEventArgs e)
          {
            dynamic item = new DynamicObjectClass();
            item.A="New Item - A";
            item.B="New Item - B";
            items.Add(item);
          }
       
          int newColumnIndex = 1;
          private void AddColumn_Click(object sender, RoutedEventArgs e)
          {
            foreach (DynamicObjectClass item in items)
            {
              item.TrySetMember(new SetPropertyBinder("NewColumn" + newColumnIndex), "New Column Value - " + newColumnIndex.ToString());
            }
       
            dataGrid.Columns.Add(new DataGridTextColumn() { Header = "New Column" + newColumnIndex, Binding = new Binding("NewColumn" + newColumnIndex) });
       
            newColumnIndex++;
          }

       

      例子比較復雜,你下載看一下: https://skydrive.live.com/#!/?cid=51b2fdd068799d15&sc=documents&uc=1&id=51B2FDD068799D15%21827

      ------------------------------------------------------

      如果你是選擇DataTable作為數據源,那就相對簡單一點,你在DataTable里面動態增加了列之后,和新列的每一行數據之后,你可以先設置DataGrid.ItemsSource = null; 然后再重新設置ItemsSource到你的DataTable:

      XAML:

        <Grid>
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <StackPanel Orientation="Horizontal">
            <Button Content="Add Column" Click="AddColumn_Click" Margin="5"/>
            <Button Content="Add Data" Click="AddData_Click" Margin="5"/>
          </StackPanel>
          <DataGrid x:Name="dataGrid" AutoGenerateColumns="True" Grid.Row="1"/>
        </Grid>
       

      C#:

        public partial class MainWindow : Window
        {
          DataTable dt = new DataTable();
          public MainWindow()
          {
            InitializeComponent();
       
            dt.Columns.Add(new DataColumn("Column1"));
            dt.Columns.Add(new DataColumn("Column2"));
       
            DataRow dr;
            for (int i = 0; i < 5; i++)
            {
              dr = dt.NewRow();
              for (int columIndex = 0; columIndex < dt.Columns.Count ; columIndex++)
                dr[columIndex] = i.ToString() + " - " + columIndex.ToString();
              dt.Rows.Add(dr);
            }
       
              dataGrid.ItemsSource = dt.DefaultView;
          }
       
          private void AddData_Click(object sender, RoutedEventArgs e)
          {
            DataRow dr = dt.NewRow();
            for (int columIndex = 0; columIndex < dt.Columns.Count; columIndex++)
              dr[columIndex] = "New Row - " + columIndex.ToString();
            dt.Rows.Add(dr);
          }
       
          int newColumnIndex = 1;
          private void AddColumn_Click(object sender, RoutedEventArgs e)
          {
            dt.Columns.Add(new DataColumn("New Column" + newColumnIndex++));
            for (int i = 0; i < dt.Rows.Count; i++)
            {
              dt.Rows[i][dt.Columns.Count - 1] = i.ToString() + " - New Column";
            }
            dataGrid.ItemsSource = null;
            dataGrid.ItemsSource = dt.DefaultView;
          }
        }

       

      下載:https://skydrive.live.com/#!/?cid=51b2fdd068799d15&sc=documents&uc=1&id=51B2FDD068799D15%21825

      posted @ 2011-09-08 02:08  Jarrey  閱讀(13779)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 精品视频在线观自拍自拍| 中文字幕无码中文字幕有码a| 中文无码乱人伦中文视频在线| 欧洲美熟女乱av在免费| 亚洲美免无码中文字幕在线| 亚洲天堂av日韩精品| 少妇高潮尖叫黑人激情在线| 欧美高清精品一区二区| 亚洲视频一区| 97人妻人人揉人人躁人人| 国产午夜福利片在线观看| 卢氏县| 国产仑乱无码内谢| 狠狠色噜噜狠狠狠狠2021| 久久婷婷五月综合色国产免费观看| 男女啪啪免费观看网站| 一区二区三区av天堂| 国产jizzjizz视频| 欧美v国产v亚洲v日韩九九| 在线观看免费人成视频色| 涟源市| 性奴sm虐辱暴力视频网站| 国产呦交精品免费视频| 精品无码一区二区三区爱欲| 中文字幕第一页亚洲精品| 国产极品尤物免费在线| 人妻va精品va欧美va| 日本丰满白嫩大屁股ass| 精品人妻中文字幕av| 永久免费无码成人网站| 精品中文人妻中文字幕| 精品精品亚洲高清a毛片| 国产精品天干天干综合网| 亚洲欧美综合一区二区三区| 九九热在线免费视频精品| 国产自产在线视频一区| 日本毛茸茸的丰满熟妇| 人人做人人澡人人人爽| 最近中文字幕国产精品| 无码日韩精品一区二区人妻| 一出一进一爽一粗一大视频|