因此,我實際上google了很多關於這個錯誤的信息,但是有一些解決方案的代碼我不明白,主要是因爲我是c#的新手,所以我會只是把問題保持原樣。System.Data.DataRowView錯誤
我的教授稱它爲「複雜的winform」。這基本上是來自2個不同表格的數據,這些表格與內部連接相關聯。到現在爲止還挺好。
我使用postgresql btw。
我有2個主表。學生(idstudent,registrationid,yearofstudy)和人員(包括idperson,姓名,電話,電子郵件等)。 (idstudent = idperson)
我的數據庫和7名學生中約有20人。學生也是人(duuh),ergo idstudent = idperson。
所以,我有一個組合框,在那裏我把所有的學生的研究的一年,並且它看起來像這樣。
private void frmComplex1_Load(object sender, EventArgs e)
{
OdbcConnection conexiune;
conexiune = new OdbcConnection();
conexiune.ConnectionString = "Driver={PostgreSQL ANSI};database=postgres;server=localhost;port=5432;uid=postgres;sslmode=disable;readonly=0;protocol=7.4;fakeoidindex=0;showoidcolumn=0;rowversioning=0;showsystemtables=0;fetch=100;unknownsizes=0;maxvarcharsize=255;maxlongvarcharsize=8190;debug=0;commlog=0;usedeclarefetch=0;textaslongvarchar=1;unknownsaslongvarchar=0;boolsaschar=1;parse=0;extrasystableprefixes=dd_;lfconversion=1;updatablecursors=1;trueisminus1=0;bi=0;byteaaslongvarbinary=0;useserversideprepare=1;lowercaseidentifier=0;gssauthusegss=0;xaopt=1;pwd=irimia96";
conexiune.Open();
OdbcCommand comanda;
comanda = new OdbcCommand();
comanda.CommandText = "SELECT DISTINCT anstudiu from studenti ORDER BY anstudiu asc ";
comanda.Connection = conexiune;
OdbcDataReader cititor;
cititor = comanda.ExecuteReader();
DataSet dsDate;
dsDate = new DataSet();
DataTable tblStudenti;
tblStudenti = new DataTable("studenti");
tblStudenti.Load(cititor);
dsDate.Tables.Add(tblStudenti);
this.cboComplex1.DataSource = dsDate.Tables["studenti"];
this.cboComplex1.DisplayMember = "anstudiu";
this.cboComplex1.ValueMember = "anstudiu";
conexiune.Close();
}
那麼什麼即時試圖做的是,每當我從下拉框中選擇一年(1/2/3),以得到的回報,我的第一個DataGrindView詳情關於那些年級學生1/2/3名來自學生桌和PERSON TABLE。例如:學生從二年級開始學習。 IdPerson,姓名,電話,電子郵件,RegistrationId,學生證。 (我知道學生證和人員標識會得到相同的價值,但我不在乎,首先讓它工作)
所以我輸入腳本,並獲得這個datarawview錯誤
private void cboComplex1_SelectedIndexChanged(object sender, EventArgs e)
{
OdbcConnection conexiune;
OdbcCommand comanda;
DataSet dsDate;
OdbcDataReader cititor;
DataTable tblPersoane;
conexiune = new OdbcConnection();
conexiune.ConnectionString = " Driver={PostgreSQL ANSI};database=postgres;server=localhost;port=5432;uid=postgres;sslmode=disable;readonly=0;protocol=7.4;fakeoidindex=0;showoidcolumn=0;rowversioning=0;showsystemtables=0;fetch=100;unknownsizes=0;maxvarcharsize=255;maxlongvarcharsize=8190;debug=0;commlog=0;usedeclarefetch=0;textaslongvarchar=1;unknownsaslongvarchar=0;boolsaschar=1;parse=0;extrasystableprefixes=dd_;lfconversion=1;updatablecursors=1;trueisminus1=0;bi=0;byteaaslongvarbinary=0;useserversideprepare=1;lowercaseidentifier=0;gssauthusegss=0;xaopt=1;pwd=irimia96";
conexiune.Open();
comanda = new OdbcCommand();
comanda.CommandText = "SELECT * from persoane INNER JOIN studenti on persoane.idpersoana = studenti.idstudent WHERE anstudiu =?";
comanda.Connection = conexiune;
comanda.Parameters.Clear();
comanda.Parameters.AddWithValue("anstudiu", cboComplex1.SelectedValue.ToString());
cititor = comanda.ExecuteReader();
tblPersoane = new DataTable("persoane");
tblPersoane.Load(cititor);
dsDate = new DataSet();
dsDate.Tables.Add(tblPersoane);
dGComplex.DataSource = dsDate;
dGComplex.DataMember = "persoane";
dGComplex.Refresh();
}
Srry爲很長的職位,我會在最後給你一個馬鈴薯。
不,它不是更好的照片。這是很難閱讀,它是不可能複製/粘貼到測試。發佈您的代碼。順便一提。什麼是錯誤? – Steve
我現在看到它。問題出在用於填充組合框的代碼中。您已使用DataTable設置DataSource,但忘記設置DisplayMember和ValueMember屬性。 – Steve
你可以設置一個斷點,看看'cboComplex1.SelectedValue.ToString()'返回什麼?最有可能的是它返回一個'System.Data.DataRowView'類型的對象,而不是你想要的值。另外,請注意,如果列類型是一個Integer,那麼在傳入字符串之前,必須將該字符串解析爲一個int。 – PoweredByOrange