Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: BaluBig
Дата сообщения: 11.01.2009 13:36
AlexandrVS
Гисы заточены под такую работу специально, тут средствами стандартной СУБД тягаться с ними невозможно.
Что приходит в голову:
* забрать всю таблицу с объектами на клиента
* построить Dictionary для нее, ключем будет Id, значением - индекс записи
* при проходе по массиву нужных Id искать в Dictionary нужный Id (это O(log n) если я не ошибаюсь, т.е. быстро), в результате получаем индекс записи.
Да, это расход памяти. Но память сейчас подешевела
Автор: 085
Дата сообщения: 12.01.2009 09:19
не соображу.Хочу передавать в метод значение @param для параметр. запроса.И чтобы тип перед-го параметра определялся тут же в методе, например с помощью GetType. Но тогда какого типа должен быть @param?
надеюсь вопрос правильно задаю
Автор: Lazy KoT
Дата сообщения: 12.01.2009 12:23
085

Цитата:
Но тогда какого типа должен быть @param?

object
Автор: cek7
Дата сообщения: 12.01.2009 17:47
Подскажите пожалуйста. Для большей наглядности отображения табличных данных, хотел выделить чётные и нечётные строки dataGridView разными цветами. Написал вот такой код:

dataGridViewFTPLog.DataSource = dataSetFTPLog;
dataGridViewFTPLog.DataMember = "Sessions";

//раскраска строк (красиво, но тормозит процесс загрузки)
/*
for (int row = 0; row < dataGridViewFTPLog.Rows.Count; row++)
if (row % 2 == 0) dataGridViewFTPLog.Rows[row].DefaultCellStyle.BackColor = Color.Ivory;
else dataGridViewFTPLog.Rows[row].DefaultCellStyle.BackColor = Color.Honeydew;
*/
Но при его выполнение время вывода данных сильно увеличилось, пришлось отключить данный блок кода.
Может быть кто нить знает как сделать красиво и не потерять производительность?

Добавлено:
Отбой. Кому интересно нашёл решение проблемы в MSDN

private void dataGridViewFTPLog_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.RowIndex % 2 == 0) e.CellStyle.BackColor = Color.Ivory;
else e.CellStyle.BackColor = Color.Honeydew;
}
Автор: AlexandrVS
Дата сообщения: 13.01.2009 08:30
EZH
BaluBig
Спасибо, буду пробывать, пока вышел тупо заполняю временную таблицу в базе и дальше запросами вытаскиваю инфу, все отрабатывает быстро кроме записи датасета в базу ну пока подождут.
BaluBig
Идея со словарем интересна,но как потом с другими таблицами в базе такую штуку связать, этот вариант подойдет наверное если только все в одну таблицу положить, да? Если ошибаюсь можешь по подробнее про дальнейшую работу с индекс записи рассказать.

Добавлено:
cek7
Есть ещё один простой способ раскрасить четные строки другим цветом

dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.AliceBlue;

И все! После этого все четные строки будут раскрашены этим цветом торможения не замечал.

Автор: EZH
Дата сообщения: 14.01.2009 16:35
AlexandrVS
Тебе надо изначально изменить подход к работе с геоданными. Как я говорил, секрет быстроты работы ГИС-ов именно в первичной работе с координатами, а уж потом на уровне ID. Ты говоришь:

Цитата:
Просто у меня есть графический слой с объектами, которые с базой могут связаться только с помощью ID (int32), я видел как быстро такую штуку отрабатывают разные ГИСы, но не знаю как они это делают.

Но ведь кроме ID у тебя так или иначе есть коордиаты объектов. Секрет быстроты доступа ГИС-ов к объетам в том, что они строоят так назывемые Квад-деревья по координатам объектов и ключ в этом дереве для них является первичным индеском для доступа (т.к. доступ по дереву на порядки быстрее прямого сканирования ID), и уже на самом низком уровне детализации дерева у них остается в мелкий набор ID, который они просто селектят. При работе, имея координаты объекта они быстро вычисляют ключ квад-дерева, куда этот объект попадает, селектят объекты по этому ключу и получают маленькую кучку их ID.

Про квад-деревья можно тут почитать (english inside): http://en.wikipedia.org/wiki/Quadtree
Автор: 085
Дата сообщения: 15.01.2009 19:21
Вот, ещё проблема. Сделал asp.net+jquery страницу, запускаю из меню ДЕБАГ, ява скрипт вообще не прёт. В коде думаю ошибок нет. Может нужно проверять на полноценном IIS ? Заранее спасибо
Автор: EZH
Дата сообщения: 15.01.2009 23:54
085
Что такое

Цитата:
ява скрипт вообще не прёт

?

Точки останова в дебаге не работают, или не видишь как скрипт исполняется?
Дебаг js работает и на Developer-ском веб-сервере на файловой системе.
Автор: 085
Дата сообщения: 16.01.2009 09:18
EZH когда запускаю страницу я не вижу как выполняется яваскрипт
Автор: AlexandrVS
Дата сообщения: 16.01.2009 12:45
EZH Спасибо я понял что это не так быстро будет как я думал Структура базы чужая , но возьму на вооружение для своей.
Автор: EZH
Дата сообщения: 16.01.2009 14:17
085
Ну так а точки останова работают? Скрипт точно правильно грузится? Я имею ввиду путь там верный? Повставляй везде вызовы alert-ов, чтобы понять где что вызывается или наоборот - нет.
Автор: 085
Дата сообщения: 16.01.2009 17:09
EZH - буду думать что не так. Пути то верные, тем более их в студии правильно поставить вообще просто.
Автор: EZH
Дата сообщения: 16.01.2009 22:30
085
Ну мож с jquery селекторами где накосячил...
Автор: 085
Дата сообщения: 20.01.2009 17:57
как в WPF к датагриду подключить базу данных? Так ?- dataGrid1.iItemsSource
что то насчёт всяких красивостей WPF информации море нашёл, а про это как то неочень. Заранее спасибо
Автор: SpinnE
Дата сообщения: 29.01.2009 18:02
Господа, есть вопрос по WPF. Как отобразить в нем произвольный datatable, количество колонок в котором неизвестно ? DataGridView в WPF не наблюдается, а прописывать в Xaml через ListView надо точно знать колонки...
Или использовать DataGridView из NET 2.0 ?


Код:
<Grid>
<ListView Name="listViewMain">
<ListView.View>
<GridView>
<GridViewColumn Header="Имя" Width="100" DisplayMemberBinding="{Binding FirstName}"/>
<GridViewColumn Header="Фамилия" Width="100" DisplayMemberBinding="{Binding LastName}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
Автор: EZH
Дата сообщения: 30.01.2009 00:44
SpinnE
Существуют свободные и бесплатные WPF Data-гриды.
http://windowsclient.net/wpf/wpf35/wpf-35sp1-toolkit-datagrid-feature-walkthrough.aspx
http://xceed.com/Grid_WPF_Intro.html

У DevExpress есть бесплатный Silverlight грид
http://www.devexpress.com/Products/NET/Controls/Silverlight/Grid/
Автор: wgnom
Дата сообщения: 30.01.2009 01:04
Для совместимости с предыдущими проектами понадобилось вот что... Головная программа посылает сообщения дочерним приложениям, находя их главные окна по имени класса окна. Чтобы задать определенное имя класса, ранее в MFC переопределялась функция LoadFrame, где писалось что-то типа:

WNDCLASS wndcls;
if (!::GetClassInfo(AfxGetInstanceHandle(), lpszClass, &wndcls)) return(FALSE);
///////////////////////////////
lpszClass="CMyoMainFrame";
///////////////////////////////
if (!::GetClassInfo(AfxGetInstanceHandle(), lpszClass, &wndcls))
{
wndcls.lpszClassName = lpszClass;
if (!AfxRegisterClass(&wndcls))
AfxThrowResourceException();
}

При написании новой версии прилоджения под C#.Net выяснилось, что класс окна именуется например так: "WindowsForms10.Window.8.app.0.3b95145", причем последняя сигнатура - переменная. Соответственно нужно аналогичным образом переименовать класс в что-то постоянное.

Подскажите, плиз, можно ли это сделать, и как? Спасибо.
Автор: SpinnE
Дата сообщения: 30.01.2009 10:50
EZH, спасибо, а все-таки средствавми самого WPF никак ?
Автор: recvezitor
Дата сообщения: 30.01.2009 11:01
Мне необходимо кучу файлов превратить в картинку. Если бы они были маленькие, то проблем бы не было, я бы их все считал в память и потом обычным образом записал в картинку. Но мне нужно постепенно добавлять информацию, т.е. надо использовать потоки и все время сливать считанную информацию.
Как дорисовать несколько картинок, чтобы каждая новая картинка добавлялась "справа". Все нужно "дорисовывать" в потоке. Сейчас делаю так:


Код:
private void toolStripMenuItemSaveAllToPictures_Click(object sender, EventArgs e)
{
FileStream stream = new FileStream(@"C:\test.jpg", FileMode.Create, FileAccess.ReadWrite);
foreach (FileDescriber fd in fileDescribers)
{
if (fd.Name != "All")
{
//stream.Position = stream.Length;
LoadSingleDataFileToMemory(fd);
ParseToStream(stream, fd);
// stream.Flush(); //хз надо или не надо?
}
}
stream.Close();
}


private void ParseToStream(Stream inputStream, FileDescriber describer)
{
if (describer != null)
{
using (Bitmap bmp = new Bitmap(describer.FrameSize, describer.ImpulseCount, PixelFormat.Format24bppRgb))
{
Rectangle rect = new Rectangle(Point.Empty, bmp.Size);

BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
try
{
IntPtr ptr = bmpData.Scan0;
int bytes = bmpData.Stride * bmpData.Height;
byte[] rgbValues = new byte[bytes];
int offset = 0;
Color selectedColor = Color.Black;
for (int y = 0; y < bmp.Height; y++)
{
offset = bmpData.Stride * y;
for (int x = 0; x < bmp.Width; x++)
{
selectedColor = colorBar1.ColorBarHandlers[colorBar1.SelectedColorBar].GetColor(currentData[y, x]);
rgbValues[offset + 2] = selectedColor.R;
rgbValues[offset + 1] = selectedColor.G;
rgbValues[offset + 0] = selectedColor.B;
offset += 3;
}
}
Marshal.Copy(rgbValues, 0, ptr, bytes);
}
catch (Exception exc)
{
}
finally
{
bmp.UnlockBits(bmpData);
}
bmp.RotateFlip(RotateFlipType.Rotate90FlipX);
bmp.Save(inputStream, ImageFormat.Jpeg);
}
}
}


Автор: Lazy KoT
Дата сообщения: 31.01.2009 19:06
wgnom
Посмотри System.Messaging, в частности System.Messaging.MessageQueue.

recvezitor
А если в суммарную картику просто дорисовывать маленькие, через Graphics.DrawImage?
Автор: recvezitor
Дата сообщения: 01.02.2009 08:48
все равно придется создавать картинку большого размера в памяти. А у меня предполагается ну очень большая картинка
Автор: KChernov
Дата сообщения: 01.02.2009 10:18
recvezitor
А может их так по-отдельности и сохранять?
А потом сшивать все сразу.
Ещё можно попробовать поискать формат файла картинки, который позволял бы дозапись, ну или матричность/прямой доступ (для последнего бмп пойдёт).
Автор: Mike13x13
Дата сообщения: 01.02.2009 13:44
Народ, я тут собрался было кое-что выводить в консоль из под вин.форм проекта. Не получилось... Кто-нить подскажет, как можно открыть консоль с формы?
Автор: SpinnE
Дата сообщения: 01.02.2009 13:56
С WPF Toolkit разобрался, работает. А теперь другое вопрос про datataset. Изначально он прочитывается из xsd, в котором для таблиц прописаны MinOccurs и MaxOccurs. Как их вытащить програмно? Пока в голову приходит только DataSet.GetXmlSchema() и разбор схемы в виде текста...

Или даже так скажем. Для каждой таблицы в dataset нужно определить отношение "один к одному" или "один ко многим".
Автор: recvezitor
Дата сообщения: 01.02.2009 15:14

KChernov
А примерчик как "сшить" нету?
Автор: Lazy KoT
Дата сообщения: 02.02.2009 17:13
Mike13x13
Смотри System.Console
Автор: KChernov
Дата сообщения: 03.02.2009 09:15
recvezitor

Цитата:
А примерчик как "сшить" нету?

Ну это либо внешней утилитой, либо искать библиотеку, которая это умеет.
Ну либо работать с файлами на уровне формата.
Собственно как-то не приходилось это делать, так что конкретно не посоветую.
Автор: AndVGri
Дата сообщения: 03.02.2009 10:24
Есть проблема с подключением к базе данных Access. Получается блокировка при открытии базы одним из пользователей при OleDbConnection.Open. Поковырялся с расширенными настройками, для OleDbConnectionStringBuilder выяснил, что по умолчанию стоит Mode = 16, что, видимо, и определяет монопольный доступ. Сменил на 1. Вроде, работает, блокировки нет.
Поискал по инету, так и не нашёл ничего путного про Mode и задаваемые для него констаты. Может кто подскажет что и какие значения означают? Или ссылку на ресурс?
Автор: SpinnE
Дата сообщения: 03.02.2009 11:05
Продолжаем про WPF DataGrid Вопрос про валидацию, как валидировать ошибки ввода в прибинденый dataset? Сам по себе грид их обрабатывает, при ошибочном вводе возвращает прежнее значение, но как перехватить эти исключения?
В статье на CodeProject
описаны способы валидации, но не совсем понятно, как опять таки с произвольными датасетами...

Код:
<dg:DataGrid Name="dataGrid" AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True"
RowStyle="{StaticResource RowStyle}" ItemsSource="{Binding}">
<dg:DataGrid.RowValidationRules>
<local:RowDataInfoValidationRule ValidationStep="UpdatedValue" />
</dg:DataGrid.RowValidationRules>
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Name">
<dg:DataGridTextColumn.Binding>
<Binding Path="Name">
<Binding.ValidationRules>
<local:CellDataInfoValidationRule ValidationStep="UpdatedValue"/>
</Binding.ValidationRules>
</Binding>
</dg:DataGridTextColumn.Binding>
</dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="Age">
<dg:DataGridTextColumn.Binding>
<Binding Path="Age">
<Binding.ValidationRules>
<local:CellDataInfoValidationRule ValidationStep="UpdatedValue"/>
</Binding.ValidationRules>
</Binding>
</dg:DataGridTextColumn.Binding>
</dg:DataGridTextColumn>
<dg:DataGridTextColumn Header="Start" Binding="{Binding Path=StartTime}"/>
<dg:DataGridTextColumn Header="End" Binding="{Binding Path=EndTime}"/>
</dg:DataGrid.Columns>
</dg:DataGrid>
Автор: Mike13x13
Дата сообщения: 04.02.2009 13:09
Lazy KoT

Цитата:
Смотри System.Console

Гы. В консольных проектах нет проблем. Да и в вин.форм можно извратиться, к примеру, через WinAPI. Но меня интересует, нет ли стандартных дотНет способов юзать System.Console в винФорм проектах. Я таких не нашел. Но, как говориться, век живи, век учись. Вот я и спрашиваю, может, кто знает... Но че-то мне сдается, что таки нету...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.