2010-07-07 2 views
0

Есть ли простой способ обрезать значения в режиме просмотра деталей в режиме редактирования? Я пробовал модифицировать запрос базы данных, чтобы обрезать значения, но после этого он не хотел делать оба способа привязки данных. Я пробовал просматривать все свойства текстовых полей и ничего не нашел.Параметры обрезки в asp.net detailsview при привязке данных

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

Я подумал, что, возможно, был путь к переходу по объекту DetailsView.Fields, но он ничего не мог понять. Мне не разрешено изменять схему от CHAR до VARCHAR. Любые другие быстрые идеи? Существует большая вероятность того, что эта страница снова изменится, и мне хотелось бы что-то, что могло бы позаботиться об этой проблеме для любых новых полей, добавленных в будущем, без дополнительной работы. К сожалению, переконфигурировать его сейчас не так уж и важно, поэтому быстрое исправление, облегчающее головную боль использования этого монстра, - это все, что я ищу.

ответ

4

Отказ от ответственности: Я использовал это в GridView, а не в DetailsView, но концепция такая же.

Создать объект EditItemTemplateField, привязать данные к текстовому полю, преобразовать его в строку и обрезать строку.

<Fields> 
    <asp:TemplateField HeaderText="FirstName"> 
     <EditItemTemplate> 
      <asp:TextBox ID="txtFirstName" Runat="server" Text='<%#Bind("FirstName").ToString().Trim() %>'/> 
     </EditItemTemplate> 
    </asp:TemplateField> 
</Fields> 

EDIT: Это не работает, так как вы не можете выполнять преобразования при связывании данных, только тогда, когда Eval используется, к сожалению.

Альтернативой является итерация каждого элемента управления при обновлении DetailsView.

void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
{ 
    for (int i = 0; i < e.NewValues.Count; i++) 
    { 
     if (e.NewValues[i] != null) 
     { 
      e.NewValues[i] = e.NewValues[i].ToString().Trim(); 
     } 
    } 
} 

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

+0

+1 - Привязка выражений работает для всех шаблонов элементов управления. – womp

+0

Точно, что я искал, спасибо. Старался делать что-то через дизайнер и события, даже не думал о разметке страницы. –

+0

Фактически, когда я попробовал это, это закончило тем, что дало мне ошибку «Вызов Bind не был хорошо отформатирован. Пожалуйста, обратитесь к документации для правильных параметров Bind'. По-прежнему искать способы исправить это; есть идеи? –

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