C# 如何将包含数据的新列添加到已显示数据的datagrid中?

C# 如何将包含数据的新列添加到已显示数据的datagrid中?,c#,wpf,C#,Wpf,我正在编写一个WPF应用程序来显示两个邮政编码之间的距离,然后我希望该距离显示在数据网格上的一个新列中。我想知道做这件事最好的方法是什么? 下面是我的代码,它用已经填充的数据库加载Datagrid void LoadDataGrid(string command, DataGrid dataGrid) { connect = new MySqlConnection(connectionString); connect.Open();

我正在编写一个WPF应用程序来显示两个邮政编码之间的距离,然后我希望该距离显示在数据网格上的一个新列中。我想知道做这件事最好的方法是什么? 下面是我的代码,它用已经填充的数据库加载Datagrid

        void LoadDataGrid(string command, DataGrid dataGrid)
    {
        connect = new MySqlConnection(connectionString);
        connect.Open();
        cmd = new MySqlCommand(command, connect);

        DataTable dt = new DataTable();
        dt.Load(cmd.ExecuteReader());
        connect.Close();
        dataGrid.Visibility = Visibility.Visible;
        dataGrid.DataContext = dt;
    }
另外,下面是将其实际加载到datagrid中的代码

            if (GPSurgeryBox.IsChecked == true)
           {
            LoadDataGrid("select distinct nameOfService as Surgeries, street, city, postcode, 
            contactNumber from gpSurgery", DataGridGP);
           }
这是我用来从数据库中提取邮政编码的代码

        private List<string> GetPostcodes(string table)
    {
        connect = new MySqlConnection(connectionString);
        connect.Open();
        string selectString = "select postcode from " + table;
        List<string> postcodes = new List<string>();
        MySqlCommand cmd = new MySqlCommand(selectString,connect);
        reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            postcodes.Add(reader.GetOrdinal("postcode").ToString());
        }
        connect.Close();

        return postcodes;
    }
这是我的XAML代码

    <Grid Margin="0,10,0,-10">
    <TextBox x:Name="PostcodeBox"  HorizontalAlignment="Left" Height="23" Margin="219,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="237" />
    <CheckBox Name="GPSurgeryBox" Content="GP" HorizontalAlignment="Left" Margin="203,61,0,0" VerticalAlignment="Top"  />
    <CheckBox Name="DentistBox" Content="Dentist" HorizontalAlignment="Left" Margin="327,64,0,0" VerticalAlignment="Top"/>
    <CheckBox Name="SchoolsBox" Content="Schools" HorizontalAlignment="Left" Margin="203,87,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.533,-5.633"/>
    <CheckBox Name="OpticianBox" Content="Opticians" HorizontalAlignment="Left" Margin="445,64,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.421,-3.6"/>
    <CheckBox Name="NurseryBox" Content="Nursery" HorizontalAlignment="Left" Margin="327,84,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.344,3.2"/>
    <Button  x:Name="SearchButton" Content="Search" HorizontalAlignment="Left" Margin="293,104,0,0" VerticalAlignment="Top" Width="95" Click="SearchButton_Click"/>
    <RadioButton  x:Name="MilesButton"  Content="Miles" HorizontalAlignment="Left" Margin="254,39,0,0" VerticalAlignment="Top" Checked="MilesButton_Checked"/>
    <RadioButton  x:Name="KMButton"  Content="Kilometers" HorizontalAlignment="Left" Margin="364,39,0,0" VerticalAlignment="Top" Checked="KMButton_Checked"/>
    <Label Content="Enter A Postcode:" HorizontalAlignment="Left" Margin="111,10,0,0" VerticalAlignment="Top"/>
    <StackPanel HorizontalAlignment="Left" Height="321" Margin="0,124,0,0" VerticalAlignment="Top" Width="792">
        <DataGrid x:Name="DataGridGP" Height="63" ItemsSource="{Binding}" Visibility="Hidden" Margin="10,0,10,0"/>
        <DataGrid x:Name="DataGridDentist" Height="63" ItemsSource="{Binding}" Visibility="Hidden" Margin="10,0,10,0"/>
        <DataGrid x:Name="DataGridSchools" Height="63" ItemsSource="{Binding}" Visibility="Hidden" Margin="10,0,10,0"/>
        <DataGrid x:Name="DataGridNursery" Height="63" ItemsSource="{Binding}" Visibility="Hidden" Margin="10,0,10,0"/>
        <DataGrid x:Name="DataGridOpticians" Height="63" ItemsSource="{Binding}" Visibility="Hidden" Margin="10,0,10,0"/>

    </StackPanel>

可以在LoadDataGrid方法中将新列添加到DataTable中:


添加datatable.Columns.Adddistance,TypeOfsString可以解决这个问题吗?我将它添加到LoadDataGrid方法中,但在使用randt.Columns.Adddistance,TypeOfsString时没有添加任何列;这就是我添加到methodNo列中的那一行。在该方法中定义列的唯一时间是,使用的唯一其他列是直接从MySql显示的列
void LoadDataGrid(string command, DataGrid dataGrid)
{
    ...
    DataTable dt = new DataTable();
    dt.Load(cmd.ExecuteReader());
    ...
    dt.Columns.Add("Distance", typeof(string));
    dataGrid.DataContext = dt;
}