none
DataGrid中的Columns的显示顺序和行头 RRS feed

  • 问题

  • DataGrid中的Columns的行有什么办法可以设定显示顺序呢,例如对应的DataTable中有ID,Name,Property三列,这三列在写入DataTable中后,DataGrid调用时有没有办法决定其显示的位置呢,例如想第一列显示ID,第二列显示Property。

    见到有一个属性是DataGrid.Columns[index].DisplayIndex,设定滞后确实可以更改顺序,但是要用index来修改index,用起来总觉得很容易出错。

    另外,在DataGrid中,如何设置行头的显示内容呢??WPF中似乎没有见到直接可以设定内容的地方,是RowHeaderTemplate么?

    2012年6月14日 15:24

答案

  • 你是不是让其AutoGenerateColumns="True" (这个属性默认值为True).

    所以,当你设置他为False时,我们可以手动的添加Column然后进行绑定,顺序当然也是可以控制的,则为下面的代码:

        <DataGrid AutoGenerateColumns="False" CanUserReorderColumns="True"
                  ItemsSource="{Binding}">
          <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="*"/>
            <DataGridTextColumn Header="Property" Binding="{Binding Property}" Width="2*"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="2*"/>
          </DataGrid.Columns>
        </DataGrid>

    C#:

          DataTable dt = new DataTable();
          dt.Columns.Add(new DataColumn("ID"));
          dt.Columns.Add(new DataColumn("Name"));
          dt.Columns.Add(new DataColumn("Property"));
          DataRow dr;
          for (int i = 0; i < 10; i++)
          {
            dr = dt.NewRow();
            dr["ID"] = i;
            dr["Name"] = "Name " + i;
            dr["Property"] = "Property " + i;
            dt.Rows.Add(dr);
          }
          this.DataContext = dt;

    顺便说一下,DataGrid的Column还可以支持鼠标拖拽重新排位置,CanUserReorderColumns="True"

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

    关于行头:

        <DataGrid AutoGenerateColumns="False" CanUserReorderColumns="True"
                  ItemsSource="{Binding}">
          <DataGrid.RowHeaderTemplate>
            <DataTemplate>
              <TextBlock Text="this is Row Header"/>
            </DataTemplate>
          </DataGrid.RowHeaderTemplate>


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 wanto_com 2012年6月18日 16:02
    2012年6月15日 7:57
    版主

全部回复

  • 你是不是让其AutoGenerateColumns="True" (这个属性默认值为True).

    所以,当你设置他为False时,我们可以手动的添加Column然后进行绑定,顺序当然也是可以控制的,则为下面的代码:

        <DataGrid AutoGenerateColumns="False" CanUserReorderColumns="True"
                  ItemsSource="{Binding}">
          <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="*"/>
            <DataGridTextColumn Header="Property" Binding="{Binding Property}" Width="2*"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="2*"/>
          </DataGrid.Columns>
        </DataGrid>

    C#:

          DataTable dt = new DataTable();
          dt.Columns.Add(new DataColumn("ID"));
          dt.Columns.Add(new DataColumn("Name"));
          dt.Columns.Add(new DataColumn("Property"));
          DataRow dr;
          for (int i = 0; i < 10; i++)
          {
            dr = dt.NewRow();
            dr["ID"] = i;
            dr["Name"] = "Name " + i;
            dr["Property"] = "Property " + i;
            dt.Rows.Add(dr);
          }
          this.DataContext = dt;

    顺便说一下,DataGrid的Column还可以支持鼠标拖拽重新排位置,CanUserReorderColumns="True"

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

    关于行头:

        <DataGrid AutoGenerateColumns="False" CanUserReorderColumns="True"
                  ItemsSource="{Binding}">
          <DataGrid.RowHeaderTemplate>
            <DataTemplate>
              <TextBlock Text="this is Row Header"/>
            </DataTemplate>
          </DataGrid.RowHeaderTemplate>


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 wanto_com 2012年6月18日 16:02
    2012年6月15日 7:57
    版主
  • 谢谢了!
    2012年6月18日 16:02