10

我想将组合框中的值作为参数传递给 SQL 语句。Winforms 组合框为我提供了几个用于检索值的选项,即 SelectedItem、SelectedText 和 SelectedValue。在这种情况下使用哪个最好/最安全?

4

4 回答 4

9
if (comboBox1.DropDownStyle == DropDownStyle.DropDown || 
    comboBox1.DropDownStyle == DropDownStyle.Simple)
{
    return comboBox1.Text;
}

Text可能是最好的使用。这将从 ComboBox 中获取当前选择的文本作为字符串。

if (comboBox1.DropDownStyle == DropDownStyle.DropDownList)
{
    return comboBox1.GetItemText(comboBox1.SelectedItem);
}

对于这种样式,您无法从ComboBox. 这将返回当前项目中的字符串SelectedIndex

于 2012-04-24T20:12:04.667 回答
9

SelectedValue 可能是最好的使用
SelectedText 将为您提供可编辑部分的选定文本,Selected Item 将返回您的对象,并且 selected index 将返回您的索引。通常对于应用程序 SelectedValue 被提取和使用。从 MSDN查看Combobox

SelectedIndex   Gets or sets the index specifying the currently selected item.                (Overrides ListControl.SelectedIndex.)
SelectedItem    Gets or sets currently selected item in the ComboBox.
SelectedText    Gets or sets the text that is selected in the editable portion of a ComboBox.
SelectedValue   Gets or sets the value of the member property specified by the ValueMember property. (Inherited from ListControl.)
于 2012-04-24T20:14:55.323 回答
9

这取决于 3 件事 1.模式2. DropDownStyle 3.必需值

在 ComboBox.SelectedIndexChanged

  • 非绑定模式

    一种。DropDownStyle = 下拉

    • SelectedItem 将返回 = SelectedText
    • SelectedValue 将返回 = ""
    • SelectedText 将返回 = SelectedText

      湾。DropDownStyle = DropDownList

      • SelectedItem 将返回 = SelectedText
      • SelectedValue 将返回 = ""
      • SelectedText 将返回 = ""
  • 使用数据绑定模式(意味着您正在从某个数据源(即 SQL Server 表)填充您的组合框)您将选择表的一列作为 DisplayMember,并选择与 ValueMember 相同或另一列。

    一种。DropDownStyle = 下拉

    • SelectedItem 将返回 = System.Data.DataRowView(提示)
    • SelectedValue 将返回 = ValueMemeber 的值
    • SelectedText 将返回 = SelectedText(DisplayMember 的值)

      湾。DropDownStyle = DropDownList

      • .SelectedItem 将返回 = System.Data.DataRowView(提示)
      • .SelectedValue 将返回 = ValueMember 的值
      • .SelectedText 将返回 = ""

注意:您也可以使用 .Text 将返回 = Text of ComboBox

结论:

  1. 未绑定模式

    • .SelectedItem 是最好的选择
  2. 数据绑定模式

    一种。ValueMember 是必需的

    • .SelectedValue 是最好的选择

      湾。DisplayMember 是必需的

      • .Text 是最好的选择
于 2017-08-09T08:49:29.037 回答
0

SelectedItem似乎是一个安全的选择。

我有这个代码:

NRBQConsts.currentSiteNum = listBoxSitesWithFetchedData.SelectedValue.ToString();

...与 NRE 一起崩溃。

改成这样后:

NRBQConsts.currentSiteNum = listBoxSitesWithFetchedData.SelectedItem.ToString();

...它工作正常。

于 2015-01-30T18:12:30.587 回答