首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

WPF,这个DataGrid数据绑定哪儿出错了

2013-09-11 
WPF,这个DataGrid数据绑定哪里出错了?GridDataGrid Namedatagrid1 Margin148,68,0,0 AutoGenerat

WPF,这个DataGrid数据绑定哪里出错了?


<Grid>
        <DataGrid Name="datagrid1" Margin="148,68,0,0" AutoGenerateColumns="False" Height="131" Width="244">
            <DataGrid.Columns>
                <DataGridTextColumn Header="科室" Width="105" Binding="{Binding Path=Name}" />
                <DataGridTextColumn Header="人数" Binding="{Binding Path=Number}" />
                <DataGridComboBoxColumn ItemsSource="{Binding Path=People}" SelectedItemBinding="{Binding Path=K_科长}" 
Header="科长" />
            </DataGrid.Columns>
        </DataGrid>       
    </Grid>



public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<Company> obc = new ObservableCollection<Company>();
        obc.Add(new Company() { Name = "人教科",Number=2,K_科长="熊俊",People=new List<string>(){"熊俊","王晓"}});
        obc.Add(new Company() { Name = "广告科", Number = 2, K_科长 = "汤姆", People = new List<string>() { "汤姆", "杰克" } });
        obc.Add(new Company() { Name = "财会科", Number = 2, K_科长 = "李莹", People = new List<string>() { "李莹", "张三" } });
        obc.Add(new Company() { Name = "人教科", Number = 4, K_科长 = "李刚", People = new List<string>() { "李刚", "王二","牛熊","刘麻子" } });
        datagrid1.ItemsSource = obc;
    }
}



class Company
{
    public string Name { get; set; }
    public int Number { get; set; }


    public string K_科长 { get; set; }
    public List<string> People { get; set; }
}




上面代码,DataGridComboBoxColumn列绑定到Pelple属性,可是为什么结果这一列没有显示呢?
[解决办法]
List<string> People 不能直接绑定到DataGridComboBoxColumn列绑定到Pelple属性

需求转换成字符串
[解决办法]
这个问题我当初也遇到过。
问题是你的People里面的数据和“K_科长”的数据不是同一个引用所以绑定不会出现你希望的选择项。
你可以新建一个People类,并重载Equals,重载的目的是wpf会调用Equals比较并选择目标项。


class People
{
pubic string Name{set;get;}

 public override bool Equals(object obj)
        {
            if (this == obj) return true;

            if (obj == null 
[解决办法]
 this.GetType() != obj.GetType())
            {
                return false;
            }

            People p = obj as People;
            if(p=null) return false;
            return this.Name == obj.Name;
}
}

[解决办法]
没有设置SelectedValuePath与DisplayMemberPath
[解决办法]
引用:
Quote: 引用:

这个问题我当初也遇到过。
问题是你的People里面的数据和“K_科长”的数据不是同一个引用所以绑定不会出现你希望的选择项。
你可以新建一个People类,并重载Equals,重载的目的是wpf会调用Equals比较并选择目标项。

字符串应该是可以比较的吧,假如ItemsSource绑定到不是Pelple属性,而是一个共享的集合,都不需要作比较的


很抱歉,是我没看清楚。
你这个问题应该出在ItemsSource的绑定上。这个ItemsSource是一列的,如果你要为每一行提供不同的ItemsSource应该要做额外的处理
[解决办法]
为了弥补我看错了楼主的问题,经过搜索找到了解决楼主的问题方法。
使用模板列可以满足楼主的需求

<DataGridTemplateColumn Header="科长">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding People}" SelectedItem="{Binding Path=K_科长}"></ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

[解决办法]
问题解决了吗?
[解决办法]
没有指定DataGrid对应的ItemsSource
[解决办法]
DataGridComboBoxColumn的ItemsSource是使用的外部设置的DataContext对象的属性进行绑定的,而不是每个Items对象的属性进行绑定的。

热点排行