Привязка данных и выдающееся исключение в установке -- .net поле с участием winforms поле с участием data-binding поле с участием exception поле с участием setter пол Связанный проблема

Data Binding and throwing exception in setter


6
vote

проблема

русский

Давайте скажем, у меня есть простой класс

 <код> public class Person {   public string Name { get; set; }    private int _age;   public int Age   {     get { return _age; }     set     {       if(value < 0 || value > 150)         throw new ValidationException("Person age is incorrect");       _age = value;     }   } }   

Тогда я хочу настроить привязку для этого класса:

 <код> txtAge.DataBindings.Add("Text", dataSource, "Name");   

Теперь, если я введу неверное возрастное значение в текстовом поле (скажем, 200), исключение в установке будет проглатываться, и я не смогу ничего делать вообще, пока не буду делать что-либо, пока не исправишь значение в текстовом поле. Я имею в виду текстовое поле не сможет потерять фокус. Это все тихие - без ошибок - вы просто ничего не можете сделать (даже закройте форму или все приложение), пока вы не исправьте значение.

Похоже, ошибка, но вопрос в том, что для этого является обходным путем?

Английский оригинал

Let's say I have a simple class

public class Person {   public string Name { get; set; }    private int _age;   public int Age   {     get { return _age; }     set     {       if(value < 0 || value > 150)         throw new ValidationException("Person age is incorrect");       _age = value;     }   } } 

Then I want to setup a binding for this class:

txtAge.DataBindings.Add("Text", dataSource, "Name"); 

Now if I enter incorrect age value in the text box (say 200) the exception in the setter will be swallowed and I will not be able to do anything at all until I correct the value in the textbox. I mean the textbox will not be able to loose focus. It's all silent - no errors - you just can't do anything (even close the form or the whole application) until you correct the value.

It seems like a bug, but the question is: what is a workaround for this?

</div
              
 
 

Список ответов

4
 
vote
vote
Лучший ответ
 

Хорошо, вот решение:

Нам нужно обрабатывать BindingComplete событие Binsingsource, CountryManager или BindingBanagerBase класса. Код может выглядеть так:

 <код> <div class="gif">   <h2>Seached Results</h2>   <% gif.forEach((value) => { %>     <img src="<%= value.images.original.url %>">     <a href="<%= value.images.original.url %>" download>Download</a>   <%})%> </div> 1  
 

Ok, here is the solution:

We need to handle BindingComplete event of BinsingSource, CurrencyManager or BindingBanagerBase class. The code can look like this:

/* Note the 4th parameter, if it is not set, the event will not be fired.  It seems like an unexpected behavior, as this parameter is called  formattingEnabled and based on its name it shouldn't affect BindingComplete  event, but it does. */ txtAge.DataBindings.Add("Text", dataSource, "Name", true) .BindingManagerBase.BindingComplete += BindingManagerBase_BindingComplete;  ...  void BindingManagerBase_BindingComplete(   object sender, BindingCompleteEventArgs e) {   if (e.Exception != null)   {     // this will show message to user, so it won't be silent anymore     MessageBox.Show(e.Exception.Message);      // this will return value in the bound control to a previous correct value     e.Binding.ReadValue();   } } 
</div
 
 
   
   

Связанный проблема

22  Как я могу настроить сортировку категории по недвижимости GRID?  ( How can i customize category sorting on a propertygrid ) 
Как я могу настроить сортировку категорий в <код> PropertyGrid ? Если я устанавливаю один из следующих ... <код> propertyGrid.PropertySort = PropertySort....

1  Force ClickOnce - приложение для начала офлайн?  ( Force clickonce application to be started offline ) 
У меня есть щелчок, как только приложение здесь, что необходимо запустить в автономном режиме исключительно. Причина в том, что его необходимо начинать очен...

0  Streaminsight и долгосрочные запросы  ( Streaminsight and long running queries ) 
У меня есть приложение, построенное на вершине Streaminsight 1.2, который имеет несколько постоянных запросов, выполняющих некоторые расчеты в операторах опре...

-1  Модульный монолит с DDD и устаревшими данными  ( Modular monolith with ddd and legacy data ) 
В моем домене у меня есть следующие модули: WMS (управление складом) Спросальдер (содержит продавщику, и т. Д.) Это приложение Multi Managaness, что означае...

770  Файл метаданных '.dll' не может быть найден  ( Metadata file dll could not be found ) 
Я работаю над проектом WPF, C # 3.0, и я получаю эту ошибку: <код> Error 1 Metadata file 'WORK=- ToolsVersionManagementSystemBusinessLogicLayerinDebug Busi...

157  Попытался прочитать или писать защищенную память. Это часто является признаком того, что другая память повреждена  ( Attempted to read or write protected memory this is often an indication that ot ) 
Я надеюсь, что кто-то может просветить меня относительно того, что может вызвать эту ошибку: попытался прочитать или писать защищенную память. Это часто яв...

2  Замените оператор импорта и загрузите DLL в код для использования объекта?  ( Replace imports statement and load dll in code to use object ) 
У меня в настоящее время есть приложения, которые используют бесплатную библиотеку регистрации NLOG (DLL), которую я ссылаюсь в моем проекте VB.NET (Импорт оп...

4  Какую книгу на TDD для C # с лечением издевателей  ( What book on tdd for c sharp with treatment of mocks ) 
Можете ли вы помнить книгу о тестировании подразделения и TDD для C #, по крайней мере, некоторое лечение отдельных объектов? Я видел эту Вопрос Но, похож...

1  Ошибка вызова .NET класса посредством оркестрации BizTalk  ( Error of calling net class through biztalk orchestration ) 
Я пытался вызвать класс .NET через оркестровку BizTalk. Но когда я отправляю сообщение на BizTalk, он не совсем звонит в класс вместо этого получил следующую ...

3  ASP.NET/ADO.NET: обработка многих соединений базы данных внутри объекта .NET?  ( Asp net ado net handling many database connections inside a net object ) 
У нас есть объект .NET, который делает много чтения / записи с базой данных. В течение всего жизненного цикла этого объекта (или страницы ASP, которая ее испо...

4  Как написать на пользовательский журнал событий?  ( How to write to a custom event log ) 
Я пытаюсь получить мою службу .NET Windows вправо на пользовательский журнал событий. Я использую <код> EventLogInstaller , чтобы создать журнал событий и ист...

0  Можно ли программно получить общую ссылку Dropbox, не отправляя пользователя на страницу входа в Dropbox?  ( Is it possible to programmatically get a shared dropbox link without sending the ) 
Я разрабатываю веб-приложение в VB.NET 4.5 и с помощью третьей стороны: <Код> Dropnet . Я задаюсь вопросом, возможно ли получить общую ссылку из Dropbox- прог...

9  D8045: не может компилировать файл c 'serialCommands.c с опцией / clr / clr  ( D8045 cannot compile c file serialcommands c with the clr option ) 
Я получаю сообщение компилятора D8045. Невозможно компилировать файл C 'serialCommands.c ° С опцией / clr. Этот файл - это библиотека C, которая была написа...

-1  Ошибка - RaceOnrcwleanean был обнаружен во время параллельного метода Parallel.invoke  ( Error raceonrcwcleanup was detected during parallel invoke method ) 
Я пытаюсь экспортировать все листы файла Excel, используя следующую часть кода. Я звоню один метод, используя разные значения параметров. Это дает мне после...

1  C # код для объемного обновления SQL Server  ( C sharp code to bulk update sql server ) 
У нас есть этот код C #, который будет обновлять таблицу базы данных SQL Server на основе флагов в структуре. <код> public struct stSRK { public string...

Связанный проблема

22  Как я могу настроить сортировку категории по недвижимости GRID? 
1  Force ClickOnce - приложение для начала офлайн? 
0  Streaminsight и долгосрочные запросы 
-1  Модульный монолит с DDD и устаревшими данными 
770  Файл метаданных '.dll' не может быть найден 
157  Попытался прочитать или писать защищенную память. Это часто является признаком того, что другая память повреждена 
2  Замените оператор импорта и загрузите DLL в код для использования объекта? 
4  Какую книгу на TDD для C # с лечением издевателей 
1  Ошибка вызова .NET класса посредством оркестрации BizTalk 
3  ASP.NET/ADO.NET: обработка многих соединений базы данных внутри объекта .NET? 
4  Как написать на пользовательский журнал событий? 
0  Можно ли программно получить общую ссылку Dropbox, не отправляя пользователя на страницу входа в Dropbox? 
9  D8045: не может компилировать файл c 'serialCommands.c с опцией / clr / clr 
-1  Ошибка - RaceOnrcwleanean был обнаружен во время параллельного метода Parallel.invoke 
1  C # код для объемного обновления SQL Server