DataGridTemplateColumn中的问题-具有自动完成框的Datagrid [英] Problem in DataGridTemplateColumn - Datagrid with Autocompletebox
本文介绍了DataGridTemplateColumn中的问题-具有自动完成框的Datagrid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我在运行时填充第一列为MaterialCode时,自动完成框运行正常,但是当我编辑第二列为Desciption时,第一列变为空.你能给我我所缺少的吗,谢谢.
When i fill the first column Which is MaterialCode at runtime the autocompletebox run ok but when i edit the second column which is Desciption the first column become empty. can you give what i''m missing , Thanks.
<DataGrid AutoGenerateColumns="False" Height="162" HorizontalAlignment="Left" Margin="78,327,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="859" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Material Code" Width="180" x:Name="autoCompleteBox2" Selector.IsSelected="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<my:AutoCompleteBox Height="23" HorizontalAlignment="Left" Margin="0,0,0,0" ItemsSource="{Binding AllRoles, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" Name="autoCompleteBox1" VerticalAlignment="Top" Width="180" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Path=Description}" Header=" Description" Width="*" />
<DataGridTextColumn Binding="{Binding Path=Quantity}" Header=" Quantity" Width="100" />
<DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Unit Measure" SelectedItemBinding="{Binding Position}" Width="100" />
</DataGrid.Columns>
</DataGrid>
public partial class SRNew : UserControl
{
public ObservableCollection<String> AllRoles { get; private set; }
public ObservableCollection<string> UnitMeasure { get; set; }
public SRNew()
{
UnitMeasure = new ObservableCollection<string>() { "Pcs", "Box", "Inches" };
InitializeComponent();
var names = new ObservableCollection<String>();
List<SRItems> myList = new List<SRItems>();
ComboBoxColumn.ItemsSource = UnitMeasure;
dataGrid1.ItemsSource = myList;
var mylist = new List<string>
{
"Macedonia",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Mauritania",
"Mauritius",
"Mexico",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Morocco",
"Mozambique",
"Myanmar",
};
for (int u = 0; u <= mylist.Count - 1; u++)
{
names.Add(mylist[u]);
}
this.AllRoles = names;
}
public class SRItems
{
public String MaterialCode { get; set; }
public String Description { get; set; }
public String Quantity { get; set; }
}
推荐答案
可能必须为DataGridTemplateColumn指定一个CellEditingTemplate.
尝试以下操作:
Hi,
probably you have to specify an CellEditingTemplate for the DataGridTemplateColumn.
Try this:
<datagridtemplatecolumn.celleditingtemplate>
<datatemplate>
<my:autocompletebox height="23" horizontalalignment="Left" margin="0,0,0,0" itemssource="{Binding AllRoles, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" name="autoCompleteBox1" verticalalignment="Top" width="180" xmlns:my="#unknown" />
</datatemplate>
</datagridtemplatecolumn.celleditingtemplate>
将编辑模板设置为与该列的显示"模板相同.
检查绑定后,应在自动完成框模板中的MaterialCode属性中添加绑定:
That sets the editing template to the same as your "display" template of the column.
After examining your bindings, you should add a binding to your MaterialCode property in the autocompletebox template:
Text={Binding Path=MaterialCode}
希望这会有所帮助.
Hope this helps.
这篇关于DataGridTemplateColumn中的问题-具有自动完成框的Datagrid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文