簡體   English   中英

DataGridView WPF中的列綁定

[英]DataGridView Column binding in WPF

我想設計一個DataGrid ,如下圖所示:

在此輸入圖像描述

我打算將DataGrid綁定到類的對象列表。 我正在計划的課程是

class Class1
{
    public Int32 Index { get; set; }
    public string Colour { get; set; }
    public string Location { get; set; }
    public string Srno { get; set; }
}

我有個問題。 我想有一個顏色屬性,我可以直接綁定到column2中的DataGrid的顏色。 但由於我計划將DataGrid綁定設置為此對象的列表,因此新屬性將被識別為列本身。 我該如何避免? 任何建議。

您可以將AutoGenerateColumns設置為False並在您的手中負責提供您希望在設置DataSource或DataMember屬性時自動生成列的列列表。

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding SourceCollection}">
  <DataGrid.Columns>
     <DataGridTextColumn Binding="{Binding Index}"/>
     <DataGridTextColumn Binding="{Binding Colour}"/>
     <DataGridTextColumn Binding="{Binding Location}"/>
     <DataGridTextColumn Binding="{Binding Srno}"/>
  </DataGrid.Columns>
</DataGrid>
<DataGrid  Name="DataGrid1" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Index" Binding="{Binding Path=Index}" />
                    <DataGridTextColumn Header="Colour" Binding="{Binding Path=Colour}"/>
                    <DataGridTextColumn Header="Location" Binding="{Binding Path=Location}" />
                    <DataGridTextColumn Header="Srno" Binding="{Binding Path=Srno}" />
                </DataGrid.Columns>
            </DataGrid>

如果您設置Datagrid1.ItemsSource = Class1的List,就是這樣做的。

 List<Class1> myList = new List<Class1>();
 DataGrid1.ItemsSource = myList;

希望這可以幫助。

您希望將Color屬性值替換為可以使用rowdatabound完成的另一個Color Property值。

在您設置Autogenerate Columns =“false”時

列:索引,顏色,位置和SrNo將顯示在Datagrid中

你說你有另一種顏色,它的值應該替換datagrid中的COLOR Column。如果我是正確的你可以通過以下方式做到這一點......

 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding SourceCollection}">
      <DataGrid.Columns>
         <DataGridTextColumn Binding="{Binding Index}"/>
        <asp:TemplateField HeaderText="Colour" SortExpression="Colour">
            <HeaderStyle Wrap="False" />
            <ItemStyle Wrap="False" />
            <ItemTemplate>
          <asp:Label ID="lblColor" Text='<%# Bind("Colour") %>' runat="server"></asp:Label>
            </ItemTemplate>
           </asp:TemplateField>
         <DataGridTextColumn Binding="{Binding Location}"/>
         <DataGridTextColumn Binding="{Binding Srno}"/>
      </DataGrid.Columns>
    </DataGrid>

VB.net:

Protected Sub GridView_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView.RowDataBound
            If e.Row.RowType = DataControlRowType.Header Or e.Row.RowType = DataControlRowType.DataRow Then 
            End If

            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim lblColor1 As Label

                lblColor1 = TryCast(e.Row.FindControl("lblColor"), Label)

                 lblColor1.Text = dtData.Rows(e.row.rowindex).ItemArray(0).tostring() ' 
' ItemArray Defined the Column Position. here give your Another Colour Column Value
            End If

        End Sub

c#.net:

protected void GridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header | e.Row.RowType == DataControlRowType.DataRow) {
    }

    if (e.Row.RowType == DataControlRowType.DataRow) {
        Label lblColor1 = default(Label);

        lblColor1 = e.Row.FindControl("lblColor") as Label;

        lblColor1.Text = dtData.Rows(e.Row.RowIndex).ItemArray(0).tostring();
        // 
        // ItemArray Defined the Column Position. here give your Another Colour Column Value
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM