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