使用linq从DataTable获取bool值

时间:2015-09-24 20:03:01

标签: mysql wpf linq datatable boolean

我必须使用DataTable和linq填充DataGrid。 DataTable包含一个MySql表(我使用linq来根据网络流量优化程序),但是当linq尝试从DataTAble获取布尔值时,我得到一个" InvalidCastException" EXC。与" OneWay'或者' TwoWay' binging无法工作......"文本。有没有办法使它工作? (sry for bad eng)

            string q = "Select * from `beszallitoi_megrendeles` "
                  + "where megrendelt='1' and beerkezett='0' "
                  + "order by megrendeles_datuma desc;";
            parancs = new MySqlCommand(q, Kapcsolat);
            Kapcsolat.Open();
            parancs.ExecuteNonQuery();

        MySqlDataAdapter mda = new MySqlDataAdapter(parancs);
        DataTable dt = new DataTable("beszallitoi_megrendeles");
        mda.Fill(dt);
        mda.Update(dt);
...
        var results = from a in dt.AsEnumerable()
                      select new
                      {
                          AZ = a.Field<int>("AZ"),
                          MEGRENDEL = a.Field<DateTime>("MEGRENDEL"),
                          KERTSZDATUM = a.Field<DateTime>("KERTSZDATUM"),
                          VEVO_CSOPORT = a.Field<string>("VEVO_CSOPORT"),
                          ROVIDVEVONEV = a.Field<string>("ROVIDVEVONEV"),
                          GYARTO = a.Field<string>("GYARTO"),
                          MEGNEVEZES = a.Field<string>("MEGNEVEZES"),
                          DARAB = a.Field<int>("DARAB"),
                          MEGJEGYZES = a.Field<string>("MEGJEGYZES"),
                          RENDSZAM = a.Field<string>("RENDSZAM"),
                          BRENDSZAM = a.Field<string>("BRENDSZAM"),
                          ROGNEV = a.Field<string>("ROGNEV"),
                          BESZALLITO = a.Field<string>("BESZALLITO"),
                          MEGREND = a.Field<DateTime>("MEGREND"),
                          VARERK = a.Field<DateTime>("VARERK"),
                          CSKULD = a.Field<string>("CSKULD"),
                          MEGJEGY2 = a.Field<string>("MEGJEGY2"),
                          BMEGREND = a.Field<bool>("BMEGREND"),
                          BERKDAT = a.Field<DateTime>("BERKDAT"),
                          BEERK = a.Field<bool>("BEERK")
                      };
        DgUjMegrendeles.ItemsSource = results;

编辑: 这是布尔列:(我修改了模式从&#34; TwoWay&#34;到&#34; OneWay&#34;然后&#34; OneTime&#34;但这样所有行都有真值)

<DataGridCheckBoxColumn  Width="45" Header="MREND." Binding="{Binding BMEGREND, Mode=OneTime, UpdateSourceTrigger=PropertyChanged}"/>

1 个答案:

答案 0 :(得分:1)

您正在创建的匿名类型(new { AZ = ... })具有只读属性。您正尝试使用TwoWay绑定模式绑定到某些内容。您必须将绑定模式设置为OneWayOneTime。但是,您不会显示您的XAML。