如何在 ASP.NET 的下拉列表中显示更新后的 table 的值
How to display value from updated table in dropdown list in ASP.NET
在 ASP.NET 的下拉列表中成功更新 table 后,我无法成功显示 SQL 服务器数据库 table 的当前值。
我的下拉列表有效,我可以 select 一个值并在 table 中更新。当我单击保存按钮时,它确实显示了我保存在 .aspx
页面上的值。但是,当我稍后显示 .aspx
页面时,该值不会显示在下拉列表中。
我会提到我的下拉列表来自 select 的 2 个值连接在一起,但我对 table 的更新是主键,以保留数据库规范化。如果这是导致不良行为的原因,任何人都可以提供有关如何在更新后显示值的建议吗?它适用于我没有在下拉列表中使用串联值的任何字段。
感谢您提供的任何帮助!
好吧,select在下拉列表中输入值不会“更新”table - 所以这很令人困惑。
我们假设在大多数情况下下拉菜单有两个值。列表中的 PK 值(值),然后显示列。如前所述,您可能会为第二列集中文本 + 值或其他内容,但它仍然会 return 您保存在数据库中的 ID 值 - 对吗?所以我们真的不关心第二列的表达式或内容,但第一列必须是 PK id。
所以说我们 select 一家酒店。我们可以像这样在酒店名单中包含“城市”:
<h3>Select Hotel</h3>
<asp:DropDownList ID="cboHotel2" runat="server"
DataValueField="ID"
DataTextField="MyHotel"
Width="288px">
</asp:DropDownList>
要填写的代码为:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadCombo();
}
public void LoadCombo()
{
string strSQL = "SELECT ID, HotelName, City, " +
"(HotelName + ' ---->(' + City + ')') AS MyHotel " +
"FROM tblHotels ORDER BY HotelName";
cboHotel2.DataSource = MyRst(strSQL);
cboHotel2.DataBind();
}
因此我们得到:
但是,假设我们在按钮事件中有代码,我们这样做:
现在非常非常小心:
要获得掉落值,你可以使用这个:
Debug.Print(cboHotel2.SelectedValue);
Debug.Print(cboHotel2.Text);
两者都会 return 值!!! (不是正文!!!!!!)
所以,我建议避免以上情况,你这样做:
Debug.Print(cboHotel2.SelectedItem.Value);
Debug.Print(cboHotel2.SelectedItem.Text);
以上将为您提供“ID”和“显示文本”。
还有,你是把加载时的组合框设置成后面的“ID”,还是文本值?????? (你在做什么?)。
你可以这样设置PK(值):
cboHotel2.Text = "73";
cboHotel2.SelectedValue = cboHotel2.Items.FindByText("Banff Aspen Lodge ---->(Golden)").Value;
现在第二种方法在这里非常糟糕,因为我们正在为第二个显示列使用连接值?
天哪,我们必须 100% 匹配文本(这可能很难做到!!)。
因此,我建议您根据掉落的 PK 值(第一列)思考、编码、使用和编写,并远离尝试通过文本设置该组合在代码中。
在 ASP.NET 的下拉列表中成功更新 table 后,我无法成功显示 SQL 服务器数据库 table 的当前值。
我的下拉列表有效,我可以 select 一个值并在 table 中更新。当我单击保存按钮时,它确实显示了我保存在 .aspx
页面上的值。但是,当我稍后显示 .aspx
页面时,该值不会显示在下拉列表中。
我会提到我的下拉列表来自 select 的 2 个值连接在一起,但我对 table 的更新是主键,以保留数据库规范化。如果这是导致不良行为的原因,任何人都可以提供有关如何在更新后显示值的建议吗?它适用于我没有在下拉列表中使用串联值的任何字段。
感谢您提供的任何帮助!
好吧,select在下拉列表中输入值不会“更新”table - 所以这很令人困惑。
我们假设在大多数情况下下拉菜单有两个值。列表中的 PK 值(值),然后显示列。如前所述,您可能会为第二列集中文本 + 值或其他内容,但它仍然会 return 您保存在数据库中的 ID 值 - 对吗?所以我们真的不关心第二列的表达式或内容,但第一列必须是 PK id。
所以说我们 select 一家酒店。我们可以像这样在酒店名单中包含“城市”:
<h3>Select Hotel</h3>
<asp:DropDownList ID="cboHotel2" runat="server"
DataValueField="ID"
DataTextField="MyHotel"
Width="288px">
</asp:DropDownList>
要填写的代码为:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadCombo();
}
public void LoadCombo()
{
string strSQL = "SELECT ID, HotelName, City, " +
"(HotelName + ' ---->(' + City + ')') AS MyHotel " +
"FROM tblHotels ORDER BY HotelName";
cboHotel2.DataSource = MyRst(strSQL);
cboHotel2.DataBind();
}
因此我们得到:
但是,假设我们在按钮事件中有代码,我们这样做:
现在非常非常小心:
要获得掉落值,你可以使用这个:
Debug.Print(cboHotel2.SelectedValue);
Debug.Print(cboHotel2.Text);
两者都会 return 值!!! (不是正文!!!!!!)
所以,我建议避免以上情况,你这样做:
Debug.Print(cboHotel2.SelectedItem.Value);
Debug.Print(cboHotel2.SelectedItem.Text);
以上将为您提供“ID”和“显示文本”。
还有,你是把加载时的组合框设置成后面的“ID”,还是文本值?????? (你在做什么?)。
你可以这样设置PK(值):
cboHotel2.Text = "73";
cboHotel2.SelectedValue = cboHotel2.Items.FindByText("Banff Aspen Lodge ---->(Golden)").Value;
现在第二种方法在这里非常糟糕,因为我们正在为第二个显示列使用连接值?
天哪,我们必须 100% 匹配文本(这可能很难做到!!)。
因此,我建议您根据掉落的 PK 值(第一列)思考、编码、使用和编写,并远离尝试通过文本设置该组合在代码中。