2016-01-12 2 views
0

Мне не хватает чего-то очень простого здесь ... Я прошел через мой отладчик, и все работает, но ListBox не заполняется новыми данными. Он отображается как пустой, когда я запускаю сайт.Заполнение ListBox из списка <string>

Я хочу:

Шаг 1. заселить Listbox с Filepath строк из моей базы данных. (Это нормально)

Шаг 2. Создайте новый список, используя элементы ListBox, удалив путь из каждой строки в процессе. (Кажется, все в порядке, count увеличивается на list, когда я отлаживаю)

Шаг 3. Переустановите ListBox, используя мой новый «список». (Не работает)

<div> 
<asp:ListBox ID="ListBox1" runat="server" Width="100%" Height="100%" AutoPostBack="true"/> 
</div> 

Извлечение пути файлов из базы данных и заполнение DataTable: (Это нормально)

private DataTable loadUserImageNames() 
{ 
    string cpUsersConnection1 = ConfigurationManager.ConnectionStrings["cp_usersConnection"].ToString(); 
    SqlConnection oSqlConnection1 = new SqlConnection(cpUsersConnection1); 
    oSqlConnection1.Open(); 
    SqlCommand oSqlCommand1 = new SqlCommand(); 
    oSqlCommand1.Connection = oSqlConnection1; 
    oSqlCommand1.CommandType = CommandType.Text; 
    oSqlCommand1.CommandText = "SELECT FilePath from User_Images where AcNo ='" + AcNo.Text + "' ORDER BY AcNo"; 
    SqlDataAdapter oSqlDataAdapter1 = new SqlDataAdapter(); 
    oSqlDataAdapter1.SelectCommand = oSqlCommand1; 
    DataTable oDataTable1 = new DataTable("User_Images"); 
    oSqlDataAdapter1.Fill(oDataTable1); 
    return oDataTable1; 
} 

Присвоить DataTable в Listbox (Это нормально).

Вспомните каждый элемент из списка и удалите Путь, оставив только finalFileName (Это нормально).

Присвоить finalFileName к list (я думаю, что это нормально, «счетчик» увеличивается при отладке)

Присвоить list к ListBox1 .... это не работает, ListBox1 пуст.

if (!Page.IsPostBack) 
{ 
    DataTable oDataTable1 = loadUserImageNames(); 
    ListBox1.DataSource = oDataTable1; 
    ListBox1.DataTextField = "FilePath"; 
    ListBox1.DataBind(); 

    List<string> list = new List<string>(); 

    foreach (ListItem s in ListBox1.Items) 
    { 
     string filePath = (s.ToString()); 
     string finalFileName = (filePath.Substring(filePath.LastIndexOf('/') + 1)); 
     list.Add(finalFileName); 
    } 
    ListBox1.DataSource = list; 
} 
+1

Вы пытались добавить ListBox1.DataBind(); после ListBox1.DataSource = list; ? Я думаю, что это должно было сделать трюк –

+0

У меня есть, это подталкивает меня к выписке, но я не знаю почему. (Есть попытка/уловка не показана) – DMur

+0

Какое исключение? также старайтесь поставить Список list = new Список (); перед тем, как ... –

ответ

1

Вам не нужно создавать list манипулировать данными, просто используйте следующую команду и затем привязать его к вашему ListBox управления. Я рассмотрел FilePath как имя столбца, которое вы будете получать из базы данных.

if (!Page.IsPostBack) 
{ 
    DataTable oDataTable1 = loadUserImageNames(); 
    foreach (DataRow dr in oDataTable1.Rows) 
    { 
     string filePath = (dr.Field<string>("FilePath")); 
     string finalFileName = (filePath.Substring(filePath.LastIndexOf('/') + 1)); 
     dr["FilePath"] = finalFileName; 
     // Or you can use following 
     // dr["FilePath"] = (filePath.Substring(filePath.LastIndexOf('/') + 1)); // In One Line 
    } 
    ListBox1.DataSource = oDataTable1; 
    ListBox1.DataTextField = "FilePath"; 
    ListBox1.DataBind(); 
} 
Смежные вопросы