我正在这样从DataGrid
列表中选择项目。
using (REntities RAEntity = new REntities())
{
var all = RAEntity.TBLM_PRODUCT.ToList<DataControllers.TBLM_PRODUCT>();
var selectionList = all.Where(x => x.PRODUCT_PROGROUP == "GL").Select(p => new { p.PRODUCT_DESC, p.PRODUCT_SPRICE }).ToList();
bs.DataSource = selectionList;
dg.DataSource = bs;
}
然后选择DataGridView
,在按钮中单击“我以其他形式给TextBox
赋值”。
if (window.ShowDialog() == DialogResult.OK)
{
selectedProduct = (DataControllers.TBLM_PRODUCT)bs.Current;
txtServiceType.Text = selectedProduct.PRODUCT_DESC.ToString();
我选择的产品声明如下:
public partial class TBLM_PRODUCT
{
public string PRODUCT_CODE { get; set; }
public string PRODUCT_DESC { get; set; }
public string PRODUCT_ISBN { get; set; }
public string PRODUCT_SUPPLIER { get; set; }
public string PRODUCT_PROGROUP { get; set; }
public Nullable<decimal> PRODUCT_SPRICE { get; set; }
}
private TBLM_PRODUCT selectedProduct;
当我尝试将数据获取到其他形式的TextBox
时,它将显示无效的转换错误,如下所示:
无法转换类型的对象 '<> f__AnonymousType0
2[System.String,System.Nullable
1 [System.Decimal]]'键入“ TBLM_PRODUCT”。
如何克服这个问题?将数据传递给对象时如何进行投射或如何将数据传递至下一个表单?
答案 0 :(得分:5)
使用此Select(p => new { p.PRODUCT_DESC, p.PRODUCT_SPRICE })
,您实际上返回的是anonymous type的列表,而不是TBLM_PRODUCT
的列表。将您的代码更改为此:
p => new TBLM_PRODUCT {PRODUCT_DESC = p.PRODUCT_DESC, PRODUCT_SPRICE = p.PRODUCT_SPRICE }
如果仍然出现错误,可能是因为无法投影到映射的实体,则需要使用TBLM_PRODUCT
实体创建具有所需属性的DTO类,如下所示:
public class TBLM_PRODUCTDTO
{
public string PRODUCT_DESC { get; set; }
public Nullable<decimal> PRODUCT_SPRICE { get; set; }
//Other Properties
}
然后像这样使用此DTO:
p => new TBLM_PRODUCTDTO {PRODUCT_DESC = p.PRODUCT_DESC, PRODUCT_SPRICE = p.PRODUCT_SPRICE }
并且:
private TBLM_PRODUCTDTO selectedProduct;
selectedProduct = (TBLM_PRODUCTDTO) bs.Current;