Страница: 1 |
Страница: 1 |
Вопрос: FoxPro->XML->DotNet->UserControl
Добавлено: 20.12.07 12:49
Автор вопроса: Shota
Люди, человеки, ТОВАРИЩИ!!! Дочитайте до конца, ПОМОГИТЕ
Ситуация:
В базе данных есть 2 таблицы: DocType и Document
В DocType в одном из полей в формате XML храниться описание типа документа( какие контролы, как расположены, типы данных и т.д.)
В Document в одном из полей хранятся сами данные так же в формате XML созданные на основе XML описания из DocType.
Вот пример для наглядности:
DocType:
<doc_type id=”Document1”>
<control id=”deal_date” DataType=”date” ControlType=”TextMasked” />
<control id=”amount” DataType=”decimal” ControlType=”TextMasked />
<control id=”client_name” DataType=”string” ControlType=”TextBox” />
<control id=”client_address” DataType=”string” ControlType=”TextMemo” />
</doc_type>
Document:
<Document1>
<deal_date>20-dec-2007</deal_date>
<amount>125.22</amount>
<client_name>Karapetyan Ashot</client_name>
<client_address>Yerevan, Armenia</client_address>
</Document1>
“TextMasked”, “TextBox”, “TextMemo” – пользовательские контролы.
Есть также контейнер который на основе XML из DocType создает эти пользовательские контролы, при получении XML из Document заполняет их, после редактирования пользователем возвращает собранный с контролов XML.
На работе это все работает в FoxPro. Я же переписываю это на C#.
В FoxPro есть такая штучка как & ( амперсанд ) назначение следующее: если у меня есть 2 переменные a и b я могу составить строку MyCommand=”a+b” в том месте кода где мне нужно получить сумму двух переменных я использую &MyCommand ( т.е. содержимое строки выполниться как написанный програмный код ). Пользуясь этой возможностью я в таблице DocType определяю значение по умолчанию для моих контролов например:
<control id=”deal_date” DataType=”date” ControlType=”TextMasked” DefaultValue=”CurrentDate” />
где CurrentDate глобальная переменная содержащая текущую дату.
При создании нового документа я назначаю значение по умолчанию следующим образом: deal_date.value = &CurrentDate
Значение DefaultValue может быть и название функции( GetClientCode (), и переменная (CurrentDate), и выражение ( Qty * Price ).
Спасибо за терпение ( если вы дочитали до сих пор )
Так вот ВОПРОС:
Как мне тоже самое реализовать в .NET ( будь то C# или VB.NET без разницы )
Или вот так лучще спросить:
Как заставить выполниться код содержащийся на сервере в «строковом» формате на мащине клиента.
Кстати, может я не правильную стратегию выбрал пытаясь повторить FoxPro-шные штучки в .NET, может есть какое другое решение?
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Пашок
ICQ: 397605205
Вопросов: 1
Ответов: 2
Профиль | | #1
Добавлено: 20.12.07 18:15
& - в NET это кокатенция. Заменить эту щтучку просто так незьзя. Нужно юзать регулярные выражения. И то, смотря в каких пределах ты юзаешь всю эту штучку, какие могут быть варианты (Только арифметика или нечто более нетривиальное По хорошему нужно свести получение данных в одну функцию, например так:
Enum DataTypes
Text = 0
Numeric = 1
NumericExpression = 2
'И сколько угодно типов
End Enum
Public Function GetData (ByVal DataType As DataTypes) As Object
Select Case datatypw
Case Text
......
Case Numeric
......
End Select
End Function
Ты нашиши на e-mail mailto:pave-borisov@yandex.ru
или в асю, опиши все возможные варианты содержимого контролов и желательно код который есть на VB.NET -- на С# я не программирую.
Я жду!
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 21.12.07 08:23
Фигня какая-то. & - это конкатенация не в .NET, а в VB. В C# этот оператор отсутствует, там для конкатенации строк используется +
Номер ответа: 3
Автор ответа:
Shota
Вопросов: 22
Ответов: 52
Профиль | | #3
Добавлено: 21.12.07 10:14
У меня весь проект на C#, вечером я попытаюсь переписать "ключевые" так сказать моменты на VB.NET и отправлю тебе на pave-borisov@yandex.ru.
Потому как там нужна не только арифметика а именно нечто более нетривиальное.
Например
1. при выходе из поля PassportNo надо проверить введенное значение в базе данных и если есть такой клиент то ввести остальные данные ( фио, адрес, телефон ...) в соответствующие поля.
2. при вводе нового документа установить КодФилиала в значение глобальной переменной ( которая при старте программы заполняется из базы данных )
и т.д. и т.п.