C#-通过更改组合框选定项将SQL数据拉至文本框/标签

时间:2019-05-17 11:22:21

标签: c# sql winforms combobox textbox

因此,我试图创建一种网站概览实用程序,每个网站上的信息都不同。

我想要一个下拉列表/组合框,读取sqldb并根据db创建项目。然后,我想用一列中的值填充不同的文本框。

说到目前为止,我的数据库表被称为“ AvSites”(仅出于此目的),我有“ projectNr”,“ siteName”,“ siteClients”和“ siteLicenses”列,我希望它们分别填充一些文本框/标签在某处。

我尝试了以下方法,这种方法确实有效,我的代码大多数时候都在工作,但是令我不满意的是选择了组合框项目后更改了数据。

希望您能提供帮助,所以这是到目前为止的代码(在此“主”程序启动之前,我有一个登录窗口,只是您不会想知道)

我对C#还是很陌生,所以如果某些事情效率低下,那就是原因:)我还在学习。

<TabPane
        xmlns="http://javafx.com/javafx/8.0.172-ea"
        xmlns:fx="http://javafx.com/fxml/1"
        tabClosingPolicy="UNAVAILABLE"
        fx:id="gridTabPane"
        fx:controller="edu.ie3.controller.gridTab.GridTabController">

    <Tab fx:id="gridMapTab" text="Map View">
        <fx:include fx:id="gridMapLayer" source="GridMapView.fxml"/>
    </Tab>

    <Tab fx:id="gridSchemaTab" text="Schema View">
        <fx:include fx:id="gridSchema" source="GridSchemaView.fxml"/>
    </Tab>

</TabPane>

1 个答案:

答案 0 :(得分:0)

您无需再次调用数据库。所有信息都在当前选定的项目中。
当像在click事件中一样将组合的DataSource设置为数据表时,组合的每个元素都是一个DataRowView,从该元素中,您可以从初始查询中获取从数据库中提取的所有信息

private void Combo1_SelectedIndexChanged(object sender, EventArgs e)
{
     DataRowView rv = Combo1.SelectedItem as DataRowView;
     if(rv != null)
     {
         label1.Text = rv[1].ToString();
         label2.Text = rv[2].ToString();
         label3.Text = rv[0].ToString();
         label4.Text = rv[3].ToString();
     }
}

侧面说明:您的代码需要进行一些改进。
首先,您应该将连接字符串存储在配置文件中,然后使用ConfigurationManager类将其读回。了解有关Configuration in NET的信息
其次,您不应该像现在这样处理一次性物品。一次性物品用完后应立即丢弃。尤其是SqlConnection可以在您的计算机和服务器上保留宝贵的系统资源。您应该开始使用using statement

string strCmd = "select * from AvSites";
using(SqlConnection con = new SqlConnection(.......))
using(SqlCommand cmd = new SqlCommand(strCmd, con)))
{
    con.Open();
    SqlDataAdapter da = new SqlDataAdapter(strCmd, con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    combo1.ValueMember = "id";
    combo1.DisplayMember = "siteName";
    combo1.DataSource = ds.Tables[0];
    combo1.Enabled = true;
    this.combo1.SelectedIndex = -1;
    // ??? not needed ==> cmd.ExecuteNonQuery();
    // not needed with using ==> con.Close();
}
// Here the connection is closed and disposed and resources are released