我使用下面的代碼兩個相關的組合框:轉換在C#
namespace WindowsFormsApplication1
{
public partial class Frm_Evr_Scoring : Form
{
public Frm_Evr_Scoring()
{
InitializeComponent();
//************* ******************
CurrentUser.CUser = "4";
CurrentUser.CexeP = "9";
//************* ******************
refreshDept();
}
public void refreshDept()
{
_360_OLDDataContext db = new _360_OLDDataContext();
var Dept = from ep in db.ExecutivePosts
join ea in db.ExePostAllocates on ep.ID equals
ea.ExePostID
join u in db.Units on ep.UnitID equals u.ID
join dept in db.Departments on u.DeptID equals dept.ID
where ea.PrsID == Convert.ToInt32(CurrentUser.CUser)
select new { dept.ID, dept.Title };
DataTable DT = new DataTable();
DT.Columns.Add(
new DataColumn()
{
DataType = Type.GetType("System.String"),
ColumnName = "DeptID"
}
);
DT.Columns.Add(
new DataColumn()
{
DataType = Type.GetType("System.String"),
ColumnName = "DeptTitle"
}
);
foreach (var item in Dept)
{
var row = DT.NewRow();
row["DeptID"] = item.ID;
row["DeptTitle"] = item.Title;
DT.Rows.Add(row);
}
DataRow DR;
DR = DT.NewRow();
DR.ItemArray = new object[] { 0, "... ... ... ... ... ..." };
DT.Rows.InsertAt(DR, 0);
Cmb_evr_Dept.DataSource = DT;
Cmb_evr_Dept.ValueMember = "DeptID";
Cmb_evr_Dept.DisplayMember = "DeptTitle";
}
private void Cmb_evr_Dept_SelectedIndexChanged(object sender, EventArgs e)
{
if (Cmb_evr_Dept.SelectedValue.ToString() != null)
{
int D =Convert.ToInt32(Cmb_evr_Dept.SelectedValue);
refreshUnit(D);
}
}
public void refreshUnit(int DeptID)
{
_360_OLDDataContext db = new _360_OLDDataContext();
var Unit = from ea in db.ExePostAllocates
join ep in db.ExecutivePosts on ea.ExePostID equals ep.ID
join u in db.Units on ep.UnitID equals u.ID
join d in db.Departments on u.DeptID equals d.ID
where d.ID == DeptID && ea.PrsID == Convert.ToInt32(CurrentUser.CUser)
select u;
DataTable DT = new DataTable();
DT.Columns.Add(
new DataColumn()
{
DataType = Type.GetType("System.String"),
ColumnName = "UnitID",
}
);
DT.Columns.Add(
new DataColumn()
{
DataType = Type.GetType("System.String"),
ColumnName = "UnitTitle",
}
);
foreach (var item in Unit)
{
var row = DT.NewRow();
row["UnitID"] = item.ID;
row["UnitTitle"] = item.Title;
DT.Rows.Add(row);
}
DataRow DR;
DR = DT.NewRow();
DR.ItemArray = new object[] {0, "... ... ... ... ... ..." };
DT.Rows.InsertAt(DR, 0);
Cmb_evr_Unit.DataSource = DT;
Cmb_evr_Unit.ValueMember = "UnitID";
Cmb_evr_Unit.DisplayMember = "UnitTitle";
}
的問題是在這裏:
private void Cmb_evr_Dept_SelectedIndexChanged(object sender, EventArgs e)
{
if (Cmb_evr_Dept.SelectedValue.ToString() != null)
{
int D =Convert.ToInt32(Cmb_evr_Dept.SelectedValue);
refreshUnit(D);
}
}
時,它會轉換成 「Cmb_evr_Dept.SelectedValue」 爲 「int」 我收到此錯誤:
An exception of type 'System.InvalidCastException' occurred in mscorlib.dll but was not handled in user code, with these datails: {"Unable to cast object of type 'System.Data.DataRowView' to type 'System.IConvertible'."}
有什麼奇怪的,我是,當我使用這條線:
int D =Convert.ToInt32(Cmb_evr_Dept.SelectedValue);
在另一行像一個按鈕單擊事件顯示在文本框中顯示沒有問題。 有人可以幫我解決這個問題嗎?我真的很困惑! 謝謝。
另外一個問題,是什麼LINQ查詢(VAR部門)之間的refreshDept的開始()方法和以下區別:
_360_OLDDataContext db = new _360_OLDDataContext();
ExecutivePost ep1 = db.ExecutivePosts.SingleOrDefault(x => x.ID ==
Convert.ToInt32(CurrentUser.CexeP));
Unit UUU = db.Units.SingleOrDefault(x => x.ID == ep1.UnitID);
Department DDD = db.Departments.SingleOrDefault(x => x.ID ==
UUU.DeptID);
var Dept1 = from d in db.Departments where d.ID == DDD.ID select new
{ d.ID, d.Title };
它不會對我的工作!
如果可以糾正,哪個更有效?包含許多連接的LINQ查詢或最後一個?
使用調試器找出發生異常時的Cmb_evr_Dept.SelectedValue。 – msitt
https://stackoverflow.com/search?q=InvalidCastException –
'Cmb_evr_Dept.SelectedValue.ToString()!= null'爲貨物而存在,待在竹飛機上。 – Will