簡體   English   中英

從數據庫獲取值到文本框

[英]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... ),但是如果您在DataGridViewSelectedIndexChanged事件上運行它,那么您應該從該行中獲取確切的數據用戶選擇了(或者,再次,我不理解您要做什么)。

我懷疑的一件事是您對代碼的印象是:

TextBox1.Text = DataGridView1.Rows[3].Cells[1].Value.ToString();

...將文本框綁定到行/單元格中的值。 這不是這樣的-在代碼運行時,該值將被檢索一次,然后在代碼再次運行時,將被檢索一次。 因此,當您必須獲取此值時,應確保代碼已運行。


編輯:

我的意思是,我如何獲得價值? 例如,PrimaryKey之類的?

這就是問題所在! 對不起,我可能正在偏離。 只需將[ValueMember][1]設置為描述數據集的值列的字符串即可。

cbxSubject.ValueMember =“時間表ID”;

比起您使用[SelectedValue][2]來訪問它,就像:

int selValue = (int)(cbxSubject.SelectedValue);

我建議您不要使用常量。 而是使用3和1,您需要編寫一些代碼以從用戶選擇的內容中找到RC 它應該是事件驅動的,並且您需要在更改時重新設置文本框。 我假設您正在使用一個變更事件,但實際上您尚未向我們提供該信息。

這里的一些偽代碼來獲得,其中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM