因此,我试图创建一种网站概览实用程序,每个网站上的信息都不同。
我想要一个下拉列表/组合框,读取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>
答案 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