2013-09-13 4 views
0

Почему в коде ниже DataBind() "работает" только до Insert()DataBind() перед вставкой данных?

Рабочий код:

DataView dvTransportadora = dtTransportadora.DefaultView; 
dvTransportadora.Sort = "NICKNAME ASC"; 

ddlTransportadora.DataSource = dvTransportadora; 
ddlTransportadora.DataValueField = "ID_CUSTOMER"; 
ddlTransportadora.DataTextField = "NICKNAME"; 
ddlTransportadora.DataBind(); 

ListItem lstItmSelecione = new ListItem("SELECT", "0"); 
ddlTransportadora.Items.Insert(0, lstItmSelecione); 

не работает код:

DataView dvTransportadora = dtTransportadora.DefaultView; 
dvTransportadora.Sort = "NICKNAME ASC"; 

ddlTransportadora.DataSource = dvTransportadora; 
ddlTransportadora.DataValueField = "ID_CUSTOMER"; 
ddlTransportadora.DataTextField = "NICKNAME"; 

ListItem lstItmSelecione = new ListItem("SELECT", "0"); 
ddlTransportadora.Items.Insert(0, lstItmSelecione); 

ddlTransportadora.DataBind(); 

В "не работает код" пункт «SELECT "не появляется, DataBind() не должен обновлять раскрывающийся список?

ответ

0

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

Чтобы предотвратить перезапись новых значений, вы можете напрямую добавить источник данных. Например, если элемент управления связан с BindingSource, вы можете вызвать метод AddNew. Если данные поступают из базы данных, вам нужно добавить новое значение в базу данных, а затем снова вызвать DataBind или сделать все, что необходимо, в зависимости от вашего сценария.

3

При привязке данных он очищает все элементы, находящиеся в коллекции, и создает новые для каждого нового элемента в источнике данных.

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

0

DataBind() «работает» только перед Insert(), поскольку DataBind() очистит все ваши данные в выпадающем списке и добавит все данные в ваш источник данных. Так что все, что вы вставляете перед удалением, удалит или очистит.

0

DropDownList - это ListControl, и все объекты ListControls имеют свойство AppendDataBoundItems (по умолчанию это значение false). Если вы установите для этого свойства значение true, любые элементы, которые будут созданы из-за вызова DataBind(), не будут сначала очищать уже существующие элементы, а будут добавлены в список. В этом случае ваш собственный элемент не должен быть очищен.

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