C# 如果更改组合框值(System.FormatException:';输入字符串的格式不正确,请更改文本框值。';)
如果更改组合框索引,我将尝试自动加载文本框值 但是我不明白如果我加载我的表单,我会收到这个错误吗 我处理空值,如果我忽略这一行,一切都很好 这是我的表格C# 如果更改组合框值(System.FormatException:';输入字符串的格式不正确,请更改文本框值。';),c#,winforms,combobox,C#,Winforms,Combobox,如果更改组合框索引,我将尝试自动加载文本框值 但是我不明白如果我加载我的表单,我会收到这个错误吗 我处理空值,如果我忽略这一行,一切都很好 这是我的表格 这是我的仓库 区域存储库 public string GetAreaNamebyAreaID(int areaID) { var result = db.btbArea.SingleOrDefault(g => g.AreaID == areaID); if (result == null) retu
这是我的仓库 区域存储库
public string GetAreaNamebyAreaID(int areaID)
{
var result = db.btbArea.SingleOrDefault(g => g.AreaID == areaID);
if (result == null)
return string.Empty;
return result.AreaName;
}
public string GetHowzehNamebyHoezehID(int howzehID)
{
var result = db.btbHowzeh.SingleOrDefault(g => g.HowzehID == howzehID);
if (result == null)
return string.Empty;
return result.HowzehName;
}
public string GetPaygahNamebyPaygahID(int paygahID)
{
var result = db.btbPaygah.SingleOrDefault(g => g.PaygahID == paygahID);
if (result == null)
return string.Empty;
return result.PaygahName;
}
何其乐观
public string GetAreaNamebyAreaID(int areaID)
{
var result = db.btbArea.SingleOrDefault(g => g.AreaID == areaID);
if (result == null)
return string.Empty;
return result.AreaName;
}
public string GetHowzehNamebyHoezehID(int howzehID)
{
var result = db.btbHowzeh.SingleOrDefault(g => g.HowzehID == howzehID);
if (result == null)
return string.Empty;
return result.HowzehName;
}
public string GetPaygahNamebyPaygahID(int paygahID)
{
var result = db.btbPaygah.SingleOrDefault(g => g.PaygahID == paygahID);
if (result == null)
return string.Empty;
return result.PaygahName;
}
工资假定
public string GetAreaNamebyAreaID(int areaID)
{
var result = db.btbArea.SingleOrDefault(g => g.AreaID == areaID);
if (result == null)
return string.Empty;
return result.AreaName;
}
public string GetHowzehNamebyHoezehID(int howzehID)
{
var result = db.btbHowzeh.SingleOrDefault(g => g.HowzehID == howzehID);
if (result == null)
return string.Empty;
return result.HowzehName;
}
public string GetPaygahNamebyPaygahID(int paygahID)
{
var result = db.btbPaygah.SingleOrDefault(g => g.PaygahID == paygahID);
if (result == null)
return string.Empty;
return result.PaygahName;
}
如果更改组合框索引,我将尝试加载文本框值
private void frmAreasManage_Load(object sender, EventArgs e)
{
//Load AreaComboBox Source from AreaTable
using (UnitOfWork db = new UnitOfWork())
{
cmbAreaNumber.DataSource = db.AreaRepository.Get();
cmbAreaNumber.DisplayMember = "AreaNumber";
cmbAreaNumber.ValueMember = "AreaID";
}
}
private void cmbAreaNumber_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValue = cmbAreaNumber.SelectedValue.ToString();
using (UnitOfWork db = new UnitOfWork())
if (!string.IsNullOrEmpty(selectedValue))
{
{
//Load HowzehhComboBox From HowzehTable Filter By AreaID
cmbHowzehNumber.DataSource = db.HowzehRepository.GetNameIDByFilter(selectedValue);
cmbHowzehNumber.DisplayMember = "HowzehNumber";
cmbHowzehNumber.ValueMember = "HowzehID";
//Get AreaName from AreaTable Filter By AreaID
txtAreaName.Text = db.AreaRepository.GetAreaNamebyAreaID(Convert.ToInt32(selectedValue));
}
}
}
private void cmbHowzehNumber_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedValue = cmbHowzehNumber.SelectedValue.ToString();
using (UnitOfWork db = new UnitOfWork())
if (!string.IsNullOrEmpty(selectedValue))
{
//Load PaygahComboBox From PaygahTable Filter By HowzehID
cmbPaygahNumber.DataSource = db.PaygahRepository.GetNameIDByFilter(selectedValue);
cmbPaygahNumber.DisplayMember = "PaygahNumber";
cmbPaygahNumber.ValueMember = "PaygahID";
//Get HowzehName from HowzehTable Filter By HowzehID
txtHowzehName.Text = db.HowzehRepository.GetHowzehNamebyHoezehID(Convert.ToInt32(selectedValue));
}
}
private void cmbPaygahNumber_SelectedIndexChanged(object sender, EventArgs e)
{
using (UnitOfWork db = new UnitOfWork())
{
//Get HowzehName from HowzehTable Filter By HowzehID
txtPaygahName.Text = db.PaygahRepository.GetPaygahNamebyPaygahID(Convert.ToInt32(selectedValue));
}
}
TL;博士
要解决您的问题,请在方法frmareasmanagement\u Load
中进行以下更改:
private void frmAreasManage_Load(object sender, EventArgs e)
{
//Load AreaComboBox Source from AreaTable
using (UnitOfWork db = new UnitOfWork())
{
// At first assign properties DisplayMember and ValueMember.
cmbAreaNumber.DisplayMember = "AreaNumber";
cmbAreaNumber.ValueMember = "AreaID";
// And then assign DataSource property of the cmbAreaNumber.
cmbAreaNumber.DataSource = db.AreaRepository.Get();
}
}
解释 为什么我们需要在
数据源
属性之前分配ValueMember
当我们分配DataSource
属性时,分配的集合的第一项成为组合框的SelectedValue
。这将触发组合框。SelectedIndexChanged
事件
如果我们在ValueMember
之前分配DataSource
(因此ValueMember=null
),则CombobBox.SelectedValue
是集合本身的第一项。在您的情况下,SelectedValue
是类型为btbArea
的对象。因此,当我要求您使用cmbAreaNumber\u SelectedIndexChanged
处理程序中的下一个代码时
txtAreaName.Text = db.AreaRepository.GetAreaNamebyAreaID(((btbArea) cmbAreaNumber.SelectedValue).AreaID);
它解决了第一次加载的问题。但随后您得到了System.InvalidCastException:“无法将类型为”System.Int32“的对象强制转换为类型为“Gim.DataLayer.btbArea”
。发生此错误的原因是,ValueMember
属性被分配给值AreaID
,并且从那时起,ComboBox。SelectedValue
是btbArea
的属性int-AreaID
的值
如果分配ValueMember=“AreaID”
然后分配DataSource
,则每当引发ComboBox.SelectedIndexChanged
事件时,SelectedValue
是属性AreaID
的值。因此,为了防止SelectedValue
成为btbArea
类型的对象(当ValueMember=null
时的情况),我们必须首先分配ValueMember
,然后分配DataSourceTL;博士
要解决您的问题,请在方法frmareasmanagement\u Load
中进行以下更改:
private void frmAreasManage_Load(object sender, EventArgs e)
{
//Load AreaComboBox Source from AreaTable
using (UnitOfWork db = new UnitOfWork())
{
// At first assign properties DisplayMember and ValueMember.
cmbAreaNumber.DisplayMember = "AreaNumber";
cmbAreaNumber.ValueMember = "AreaID";
// And then assign DataSource property of the cmbAreaNumber.
cmbAreaNumber.DataSource = db.AreaRepository.Get();
}
}
解释
为什么我们需要在数据源
属性之前分配ValueMember
当我们分配DataSource
属性时,分配的集合的第一项成为组合框的SelectedValue
。这将触发组合框。SelectedIndexChanged
事件
如果我们在ValueMember
之前分配DataSource
(因此ValueMember=null
),则CombobBox.SelectedValue
是集合本身的第一项。在您的情况下,SelectedValue
是类型为btbArea
的对象。因此,当我要求您使用cmbAreaNumber\u SelectedIndexChanged
处理程序中的下一个代码时
txtAreaName.Text = db.AreaRepository.GetAreaNamebyAreaID(((btbArea) cmbAreaNumber.SelectedValue).AreaID);
它解决了第一次加载的问题。但随后您得到了System.InvalidCastException:“无法将类型为”System.Int32“的对象强制转换为类型为“Gim.DataLayer.btbArea”
。发生此错误的原因是,ValueMember
属性被分配给值AreaID
,并且从那时起,ComboBox。SelectedValue
是btbArea
的属性int-AreaID
的值
如果分配ValueMember=“AreaID”
然后分配DataSource
,则每当引发ComboBox.SelectedIndexChanged
事件时,SelectedValue
是属性AreaID
的值。因此,为了防止SelectedValue
成为类型为btbArea
的对象(当ValueMember=null
时的情况),我们必须首先分配ValueMember
,然后在屏幕截图中分配DataSource
,SelectedValue
不是一个数字。使用if(int.TryParse(selectedValue,out int res)){…}
代替if(!string.IsNullOrEmpty(selectedValue))
。还要确保CMBReaNumber。项是有效的数字。调试器信息显示CMBReaNumber.SelectedValue
不是数字,而是System.Data.Entity.DynamicProxies
。这可能与以下问题有关:@HamidRezaMohammadi,如果我忽略这一行//txtAreaName.Text=db.AreaRepository.GetAreaNamebyAreaID(Convert.ToInt32(selectedValue));其他线路工程正确翻译为波斯语hamidreza-jan-man线路,推荐mikonam hamechi khoobe yani hata vaghti表单加载错误nadaram(亚尼时代的伊拉克人从埃特法格·米奥特手中接过——他从巴亚德手中接过了从组合框中接过的米科纳姆·图伊手中接过的一封信,内容为零,内容为改变指数ejra nashe ta vaghti ke yeky entekhabesh kone)ama Nemidonam chetori man taze shoro kardamI很抱歉我的第一个评论,我有一个错误,没有注意到实际的数据类型。正如Ross建议的那样,它不是一个数字,而是一个System.data.Entity.DynamicProxies
@RossGurbutt我关闭延迟加载启用,并使用set Configuration.ProxyCreationEnabled=false;但是我的问题在屏幕截图中没有解决,selectedValue
不是一个数字。请使用if(int.TryParse(selectedValue,out int res)){…}
而不是if(!string.IsNullOrEmpty(selectedValue))
。还要确保CMBReaNumber。项
是有效的数字。调试器信息显示CMBReaNumber.SelectedValue
不是数字,而是一个System.Data.Entity.DynamicProxies
。这可能与以下问题有关:@HamidRezaMohammadi,如果忽略此行//txtAreaName.Text=db。AreaRepository.GetAreaNamebyAreaID(转换为.ToInt32(selectedValue));其他行