2013-05-22 3 views
0

У меня есть настольное приложение с ListBox, которое будет принимать записи (файлы внутри каталога и его подкаталогов) более 10 000. Когда я назначаю его DataSource с этим DataTable более чем на 50 000, он заставляет пользовательский интерфейс зависать, даже если он находится внутри DoWorkBackgroundWorker, таким образом, висит также мой ProgressBar, который указывает на прогресс в распределении данных в ListBox.Назначение DataSource ListBox

Я также использовал метод here, чтобы избежать поперечной резьбы при назначении его DisplayMember и ValueMember, но все же он повесился.

Вот код:

private void bgWorkerForLstBox1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    string viewPath = string.Empty; 

    if (radFullPath.Checked) 
     viewPath = "fullPath"; 
    else if (radShortPath.Checked) 
     viewPath = "truncatedPath"; 
    else 
     viewPath = "fileName"; 

    if (dt1 != null) 
     if (dt1.Rows.Count > 0) 
      SetListBox1Props(viewPath, "fullPath"); 
} 

delegate void SetListBox1PropsCallback(string DisplayMember, string ValueMember); 

private void SetListBox1Props(string DisplayMember, string ValueMember) 
{ 
    if (this.lstBox1.InvokeRequired) 
    { 
     SetListBox1PropsCallback d = new SetListBox1PropsCallback(SetListBox1Props); 
     this.Invoke(d, new object[] { DisplayMember, ValueMember }); 
    } 
    else 
    { 
     this.lstBox1.DataSource = dt1; 
     this.lstBox1.DisplayMember = DisplayMember; 
     this.lstBox1.ValueMember = ValueMember; 
    } 
} 
+2

Вы действительно хотите показать записи «50 000», не можете ли вы реализовать пейджинг? – Habib

+0

Это настольное приложение. Если это поможет, как я могу реализовать подкачку, как в «GridView»? –

+0

Почему вы пошли на управление списком, привязка такого количества данных замедлит приложение. Поэтому использование концепции подкачки также использует Gridview/Repeater, также реализуя концепцию поискового вызова в стороне базы данных. В какой базе данных вы используете? –

ответ

1

Количество предметов, которые вы хотите показать слишком большой для окон. Если вам это нужно и вы не хотите внедрять какую-то разбивку на страницы, я бы предложил использовать элемент управления ListView в VirtualMode. См. Эту ссылку для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.virtualmode.aspx

+0

Я нашел что-то полезное здесь http://www.vbaccelerator.com/home/NET/Code/Controls/ListBox_and_ComboBox/VListBox/VListBox.asp, но у него просто есть своего рода ошибки ... –

Смежные вопросы