我有一个向Sql Server表中插入数据的DataGrid
。在DataGrid
内部,我让ComboBox
从一个代码簿(这是来自同一个数据库的表)中提取数据,并将这些数据插入到我绑定到DataGrid
的表中。这是XAML:
<DataGrid Name="dgrStavke" AutoGenerateColumns="False" Height="160" Width="600" HorizontalAlignment="Left" Margin="5" Grid.Row="7" Grid.ColumnSpan="4">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Artikl ID">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="cmbArticle" Width="120" ></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Article Name" Width="150"></DataGridTextColumn>
<DataGridTemplateColumn Header="Usluga ID">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="cmbService" Width="120"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Service Name" Width="150"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
当我在combobox文章中选择文章id时,下一个DataGridTextColumn
应该显示这篇文章的名称。服务也是如此。插入少量文章和服务是可能的,这就是我使用Datagrid
的原因。
我该怎么做呢?
谢谢。
发布于 2013-01-24 12:21:36
我想下面的例子会帮助你实现你的目标。
在下面使用的XAML代码中,
<Window.Resources>
<ObjectDataProvider x:Key="RecordValues" ObjectType="{x:Type local:RecordTemp}" MethodName="GetPersonList" >
</ObjectDataProvider>
</Window.Resources>
<Grid>
<Grid>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}"
Margin="10,10,73,155" Name="dataGrid1">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Artikl ID" Width="300"
SelectedValueBinding="{Binding SelectedPart, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="ArticleID"
ItemsSource="{Binding Source={StaticResource RecordValues}}" />
<DataGridTextColumn Header="Order Name" Binding="{Binding SelectedPart.ArticleName}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Grid>
在下面使用的C#代码中,
public class RecordTemp : INotifyPropertyChanged
{
List<PartsList> _value = new List<PartsList>();
public RecordTemp()
{
_value.Add(new PartsList() { ArticleID = "1", ArticleName = "one - 1", ArticleQuantity = 20 });
_value.Add(new PartsList() { ArticleID = "2", ArticleName = "Two - 2", ArticleQuantity = 10 });
}
public List<PartsList> GetPersonList()
{
return _value;
}
private PartsList _SelectedPart;
public PartsList SelectedPart
{
get { return _SelectedPart; }
set
{
_SelectedPart = value;
OnPropertyChanged("SelectedPart");
}
}
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null )
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public class PartsList
{
public string ArticleID { get; set; }
public double ArticleQuantity { get; set; }
public string ArticleName { get; set; }
}
在MainWindow中,下面的代码可以帮助绑定网格。
ObservableCollection<RecordTemp> RecordsTemp = new ObservableCollection<RecordTemp>();
RecordsTemp.Add(new RecordTemp());
RecordsTemp.Add(new RecordTemp());
dataGrid1.DataContext = RecordsTemp;
如果您有任何需要澄清的地方,请发表意见。我会帮你的
发布于 2013-01-21 13:37:29
((ComboBox)GRID.Columns[N].FindControl("cmbArticle")).COMBO-BOX-PROPERTY
这个语法正确吗?我不知道,我想你是在找这样的东西。
https://stackoverflow.com/questions/14439697
复制