如何在comboBox的DrawItem事件中获取DisplayMember值?C#

yon*_*236 8 c# winforms

请考虑以下事项:

我使用以下方法填充我的comboBox:

void populateComboBox()
{
    comboBox1.DataSource = GetDataTableSource(); // some data table used as source
    comboBox1.DisplayMember = "name";            // string
    comboBox1.ValueMember = "id";                // id is an int

    // Suppose I have this data in my comboBox after populating it
    // 
    //
    // id (ValueMember) | name (DisplayMember)
    // -----------------------------------------
    //  1       | name1
    //  2       | name2
    //  3       | name3
}
Run Code Online (Sandbox Code Playgroud)

DrawItem事件中,我想获取DisplayMembercomboBox 的(名称)的值并将其分配给某个变量.到目前为止,我得到了这个代码,似乎没有工作......请纠正.提前致谢....

void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    string name = ((System.Data.DataRowView)(comboBox1.SelectedValue = e.Index))["name"].ToString();

    // do something
    //  
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*ick 14

好吧,我刚刚遇到了这个问题,这是一个更好的答案:

string displayValue = this.GetItemText(this.Items[e.Index]);             
g.DrawString(displayValue, e.Font, br, e.Bounds.Left, y + 1);
Run Code Online (Sandbox Code Playgroud)

每个MSDN:

如果未指定DisplayMember属性,则GetItemText返回的值是项的ToString方法的值.否则,该方法返回在item参数中指定的对象的DisplayMember属性中指定的成员的字符串值

http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.getitemtext(v=vs.80).aspx


Ren*_*iuz 1

只使用组合框项目怎么样,它被选择显示值:

string name = (string)comboBox1.Items[e.Index];
Run Code Online (Sandbox Code Playgroud)

如果你得到e.Index = -1,改变DrawMode = OwnerDrawVariableDropDownStyle = DropDown

编辑:

好吧,我明白出了什么问题。我使用字符串作为数据源进行了测试,因此在您的代码中应该可以这样工作:

string name = ((DataRowView)comboBox1.Items[e.Index])["name"];
Run Code Online (Sandbox Code Playgroud)