【发布时间】:2020-05-12 01:17:11
【问题描述】:
如果我更改组合框索引,我将尝试自动加载文本框值 但不明白如果我加载我的表单会收到此错误?
我处理我的 null,如果我忽略这一行,一切都很好!
这是我的表格
这是我的仓库
区域存储库
public string GetAreaNamebyAreaID(int areaID)
{
var result = db.btbArea.SingleOrDefault(g => g.AreaID == areaID);
if (result == null)
return string.Empty;
return result.AreaName;
}
HowzehRepository
public string GetHowzehNamebyHoezehID(int howzehID)
{
var result = db.btbHowzeh.SingleOrDefault(g => g.HowzehID == howzehID);
if (result == null)
return string.Empty;
return result.HowzehName;
}
Paygah 存储库
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));
}
}
【问题讨论】:
-
在屏幕截图中,
selectedValue不是数字。使用if(int.TryParse(selectedValue, out int res)){...}而不是if (!string.IsNullOrEmpty(selectedValue))。还要确保cmbAreaNumber.Items是有效数字。 -
调试器信息显示
cmbAreaNumber.SelectedValue不是数字,而是System.Data.Entity.DynamicProxies。这很可能与以下问题有关:Why is EF returning a proxy class instead of the actual entity? -
@HamidRezaMohammadi 如果我忽略这一行 //txtAreaName.Text = db.AreaRepository.GetAreaNamebyAreaID(Convert.ToInt32(selectedValue));其他线路工作正确翻译成波斯语 hamidreza jan 在线 ro ke 表扬 mikonam hamechi khoobe yani hata vaghti form load mishe error nadaram (yani age iradi daram tooye load form man etefagh miogte - hes mikonam tooye load form bayad ye kari konam ke combobox man kolan null bashe ke changeindex ejra nashe ta vaghti ke yeky entekhabesh kone ) ama nemidoonam chetori man taze shoro kardam
-
我很抱歉我的第一个评论,我有一个错误,没有注意实际的数据类型。正如罗斯建议的那样,它不是一个数字,而是一个
System.Data.Entity.DynamicProxies。 -
@RossGurbutt 我关闭延迟加载启用并使用 set Configuration.ProxyCreationEnabled = false;但我的问题没有解决