Ошибка в связывании источника данных со списком - PullRequest
1 голос
/ 08 октября 2009

У меня есть метод, упомянутый ниже, где я привязываю DataSource к элементу управления combobox.

    // floorLocnList is coming from a webservice method
    private void lstFloor_BindFloor(FloorLocModel[] floorLocnList)
    {
        this.comboBox1.DataSource = floorLocnList;         
        this.comboBox1.DisplayMember = "Location";
        this.comboBox1.ValueMember = "FloorLoc";
    }

и класс, определенный следующим образом

[Serializable]
public class FloorLocModel
{
    private int floorLoc;
    private string location;

    public int FloorLoc
    {
        get
        {
            return this.floorLoc;
        }
        set
        {
            this.floorLoc = value;
        }
    }

    public string Location
    {
        get
        {
            return this.location;
        }
        set
        {
            this.location = value;
        }
    }
}

Показывает ошибку Значение не попадает в ожидаемый диапазон после достижения значения ValueMember

Bug Detail:

   at System.Windows.Forms.ListControl._SetDataBinding(Object newDataSource, BindingMemberInfo newDisplayMember, Boolean fForceRebind)
   at System.Windows.Forms.ListControl.set_ValueMember(String value)
   at IdineSmart.frmLogin.lstFloor_BindFloor(FloorLocModel[] floorLocnList)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean verifyAccess, StackCrawlMark& stackMark)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at System.Windows.Forms.Control.TASK.Invoke()
   at System.Windows.Forms.Control._InvokeAll()
   at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
   at System.Windows.Forms.ListView.WnProc(WM wm, Int32 wParam, Int32 lParam)
   at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
   at Microsoft.AGL.Forms.EVL.EnterModalDialog(IntPtr hwnModal)
   at System.Windows.Forms.Form.ShowDialog()
   at IdineSmart.frmMain.frmMain_Load(Object sender, EventArgs e)
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form._SetVisibleNotify(Boolean fVis)
   at System.Windows.Forms.Control.set_Visible(Boolean value)
   at System.Windows.Forms.Application.Run(Form fm)
   at IdineSmart.Program.Main()

Все работало нормально, но я вдруг понял, что это стало причиной проблемы. Когда я отлаживаю код valuemember отображает пустую строку, даже если я назначил ее, возможно, это проблема, но как это может произойти, как это. Пожалуйста, помогите мне.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Я не уверен, но думаю, что у меня была такая же проблема.

Попробуйте изменить последовательность - источник данных в конце.

    this.comboBox1.DisplayMember = "Location";
    this.comboBox1.ValueMember = "FloorLoc";
    this.comboBox1.DataSource = floorLocnList;     
0 голосов
/ 09 октября 2009

Наконец-то нашел. Все из-за сообщения об ошибке, которое показывает . Но актуальная проблема заключалась в том, что у меня было мало пользовательских элементов управления в проекте, который был нацелен на платформу Pocket PC 2003 SDK, а основной проект был нацелен на Pocket PC 2005 SDK. Таким образом, я сделал весь свой проект таким же SDK, и проблема была решена.

В любом случае, спасибо за ответ.

...