GarF1eld
- Вопросы
- Ответы
Имя | Саша |
Возраст | 23 |
Сайт | Неизвестно |
Неизвестно | |
Участвует в проекте | 1051 дн., 10 час., 46 мин. |
Последняя активность | 784 дн., 8 час., 41 мин. назад |
Ответы
Перейти к вопросу →
CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern;
ну или как-то так
Перейти к вопросу →
Вообще если количество строк не фиксировано и нужно использовать один селект, то это интересный вопрос. А если же нет, то можно сформировать динамический запрос и выполнить его, где-то так
-- таблица ключей
DECLARE @keys TABLE(Id INT, Value NVARCHAR(MAX));
INSERT INTO @keys
VALUES (1, '1'), (2, '2'), (3, '3');
-- таблица значений
DECLARE @values TABLE(Id INT, Value NVARCHAR(MAX));
INSERT INTO @values
VALUES (1, '1'), (3, '3');
-- работаем через курсор
DECLARE cur CURSOR LOCAL FAST_FORWARD FOR
SELECT k.Value AS [Key],
v.Value AS [Value]
FROM @keys k
LEFT JOIN @values v
ON k.Id = v.Id;
DECLARE @query NVARCHAR(MAX) = 'SELECT ',
@key NVARCHAR(MAX),
@value NVARCHAR(MAX);
OPEN cur;
FETCH NEXT FROM cur
INTO @key, @value;
-- формируем строку запроса
WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = @query + CASE WHEN @value IS NULL THEN 'NULL' ELSE '''' + @value + '''' END + ' AS [' + @key + ']';
FETCH NEXT FROM cur
INTO @key, @value;
IF @@FETCH_STATUS = 0
SET @query = @query + ', ';
END;
CLOSE cur;
DEALLOCATE cur;
-- выполняем запрос
EXEC (@query);
Перейти к вопросу →
На самом деле все оказалось довольно логично: Дело в том, что ItemsSource.ItemContainerGenerator.ItemFromContainer производит поиск в своих элементах. Он не знает, что может содержать элементы, также производные от ItemsControl (как TreeViewItem). Поэтому для решения задачи нужно вызывать ItemContainerGenerator.ItemFromContainer у родительского элемента первого уровня.
private void treeView1_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point mousePos = e.GetPosition(null);
Vector diff = _DragStart - mousePos;
if (e.LeftButton == MouseButtonState.Pressed &&
Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
{
TreeView treeView = sender as TreeView;
TreeViewItem treeViewItem =
FindAnchestor<TreeViewItem>((DependencyObject)e.OriginalSource);
if (treeViewItem != null)
{
// ищем родительский элемент
ItemsControl parent = FindParent<ItemsControl>(treeViewItem);
object item = parent.ItemContainerGenerator.
ItemFromContainer(treeViewItem);
if (item is Measure)
{
DataObject dragData = new DataObject("Measure", item);
DragDrop.DoDragDrop(treeViewItem, dragData, DragDropEffects.Move);
}
}
}
И еще один хелпер
private static T FindParent<T>(FrameworkElement current)
where T : FrameworkElement
{
do
{
current = VisualTreeHelper.GetParent(current) as FrameworkElement;
if (current is T)
{
return (T)current;
}
}
while (current != null);
return null;
}
Перейти к вопросу →
Просто нужно проверять System.Media.RenderCapability. Советую обратить внимание на свойство Tier
Перейти к вопросу →
Взгляни сюда, надеюсь поможет ASP.NET 2.0 and "Validation of ViewState Mac failed" exception.
Еще похоже, проблема возникает из за окончания сессии. попробуй увеличить таймаут
Перейти к вопросу →
Может проще будет навесить на кнопку ?? onclick="this.blur();"
Перейти к вопросу →
установить у грида AutoGenerateColumns в false
Перейти к вопросу →
Отвечаю сам себе
WSDualHttpBinding binding = new WSDualHttpBinding(WSDualHttpSecurityMode.Message);
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
binding.MaxReceivedMessageSize = Int32.MaxValue;
// ищем cертификат .cer для сервера в TrustedPeople
X509Certificate2 cert = null;
X509Store certStore = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
for (int i = 0; i < certStore.Certificates.Count; i++)
if (certStore.Certificates[i].SubjectName.Name == "CN=testsvc")
cert = certStore.Certificates[i];
certStore.Close();
// указываем identity по сертификату
X509CertificateEndpointIdentity identity = new X509CertificateEndpointIdentity(cert);
// адрес
EndpointAddress addr = new EndpointAddress(new Uri("http://localhost:999/ServiceAdmin"),
identity,
new AddressHeaderCollection());
// это коллбек
_ClientCallback = new ServiceAdminCallback();
// это клиент
Client = new ServiceAdminClient(new InstanceContext(_ClientCallback),
binding,
addr);
Client.ClientCredentials.UserName.UserName = _LastUser;
Client.ClientCredentials.UserName.Password = _LastPassword;
Вот так. И никаких конфигов ;) PS. В этом примере реализовано только шифрование сообщений серверу
Перейти к вопросу →
Если я правильно понял, то лучше вынести интерфейсы в отдельную сборку и использовать версионность. Для каждого нового пакета интерфейсов просто менять версию сборки интерфейсов и реализаций к ним, тогда и старые и новые реализации будут загружать только те версии сборок, с которыми они ладят
Перейти к вопросу →
Я бы все таки отдал предпочтение безопасности типов, т.к если интерфейс обновится, то все сборки использующие его будут уведомлены, что добавлены новые методы. К сожалению со вторым вариантом так не прокатит, компилироваться будет, но очень вероятны ошибки при выполнении из-за несогласования типов параметров. А если все находится в одной сборке, тогда смысл использовать второй вариант?