[英]Get values from database to textbox
我有一個具有DataGridView和ComboBox的WinForm,允許用戶(從數據庫中)選擇一個主題。
cbxSubject.DataSource = dsSched.Tables["Schedules"]; cbxSubject.DisplayMember = "Subject"; ...
DataGridView看起來像這樣: http : //i45.tinypic.com/18gmmu.png我添加了DataGridView,因為我不知道如何從數據庫中獲取這些值。 我使用了類似這樣的代碼來獲取值:
TextBox1.Text = DataGridView1.Rows [3] .Cells [1] .Value.ToString();
但是后來我意識到,如果要選擇的主題超過2個,它將不再起作用,因為代碼已設置為獲取第3行和第1個單元格的值。 因此,即使用戶更改了主題,輸出值(w / c隨后顯示在文本框中)也將相同。 還有其他獲取這些價值的方法嗎? 請幫忙,謝謝。
您可以通過這種方式添加comboxbox
DataGridViewComboBoxColumn subjectsCombo = new DataGridViewComboBoxColumn();
subjectsCombo.DataPropertyName = "SubjectID";
subjectsCombo.HeaderText = "Subjects";
subjectsCombo.DataSource = dsSched.Tables["Subjects"];
subjectsCombo.ValueMember = "SubjectID";
subjectsCombo.DisplayMember = "SubjectText";
cbxSubject.Columns.Add(subjectsCombo);
我會盡力解決您的一些疑問:
我添加了DataGridView,因為我不知道如何通過其他方式從數據庫中獲取這些值
你已經有一個DataSet
被稱為“dsSched”充滿了數據庫值。 因此,不,您不需要DataGridView
。 只需直接從DataSet中填寫任何內容即可:
string data = dsSched.Tables["Schedules"].Rows[3].Cells[1].Value.ToString();
然后我意識到如果要選擇的主題超過2個,它將不再起作用,因為代碼設置為獲取第3行和第1個單元格的值。
好吧,我不確定您在哪里運行這段代碼( TextBox1.Text = Data...
),但是如果您在DataGridView
的SelectedIndexChanged
事件上運行它,那么您應該從該行中獲取確切的數據用戶選擇了(或者,再次,我不理解您要做什么)。
我懷疑的一件事是您對代碼的印象是:
TextBox1.Text = DataGridView1.Rows[3].Cells[1].Value.ToString();
...將文本框綁定到行/單元格中的值。 這不是這樣的-在代碼運行時,該值將被檢索一次,然后在代碼再次運行時,將被檢索一次。 因此,當您必須獲取此值時,應確保代碼已運行。
編輯:
我的意思是,我如何獲得價值? 例如,PrimaryKey之類的?
這就是問題所在! 對不起,我可能正在偏離。 只需將[ValueMember][1]
設置為描述數據集的值列的字符串即可。
cbxSubject.ValueMember =“時間表ID”;
比起您使用[SelectedValue][2]
來訪問它,就像:
int selValue = (int)(cbxSubject.SelectedValue);
我建議您不要使用常量。 而是使用3和1,您需要編寫一些代碼以從用戶選擇的內容中找到R
和C
它應該是事件驅動的,並且您需要在更改時重新設置文本框。 我假設您正在使用一個變更事件,但實際上您尚未向我們提供該信息。
這里的一些偽代碼來獲得,其中IM這個打算
public DataGridView1_SelectionChanged(object sender, ChangedEventArgs e)
{//this might not be the right event, I'll leave it up to you to do your own homework
int R = //Get the current Selected Row;
int C = //Get the current Selected Cell/column;
TextBox1.Text = dsSched.Tables["Schedules"].Rows[R].Cells[C];
///OR YOU COULD DO SOMETHING LIKE THIS
TextBox1.Text = ((DataGridView)sender).SelectedRows[0].Cells[1].Value;
}
//Please note, this is only pseudocode, I dont like doing peoples homework for them.
這將為您提供所需的更通用的想法/算法。 請記住,這甚至可能不是執行此操作的最佳方法,但是我僅根據到目前為止提供給我們的信息來建議這樣做。 順便說一句,你嘗試了什么? 並可以給我們提供一些較大的代碼示例,可能會犯一個更簡單的錯誤,即您沒有向我們展示,所以我們不能告訴您:-)
考慮到您實際上還沒有提出正確的問題,因為我們不知道您為什么要按照自己的意願去做,所以我沒有比這更具體的了。 GIGO,您必須提出正確的問題才能獲得正確的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.