Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать такой большой Sort. 
V
    Опции темы
Sharki
Дата 26.3.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Имеется 5 колонок в datagridview кот.(true or false).Каждой колонке соответствует её image.Как сделать такую проверку по 5 колонкам ,чтоб проверить в какой колонке true или false,и в колонку "Info" добавить нужную картинку.Зарание огромное спасибо.
PM MAIL   Вверх
Sharki
Дата 27.3.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Нужна помошь,плиззззз.
PM MAIL   Вверх
-Mikle-
Дата 28.3.2009, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Как всегда мои способности экстрасенса нужны...
Предполагаю, что у тебя есть некий DataTable, который ты ставишь в DataSource твоего DataGridView.
В таком случае можно добавить в DataTable одну колонку и задать вычисление в ней.
Код

            // получаем твой DataTable с 5 колонками
            DataTable table = this.GetTableWith5TrueFalseColumns();
            DataColumn infoColumn = table.Columns.Add("Info");

Если вычисления над колонками простое, можно использовать свойство Expression, чтобы задать авто вычисление значения:
Код

            infoColumn.Expression = "col1 + (col2 * col3) + 123";

В качестве Expression можно задавать различные функции и вычисления (см. здесь описание)
Если вычисление сложное, то можно пробежаться ручками по строкам и вычислить необходимое значение.
Код

            DataTable table = this.GetTableWith5TrueFalseColumns();
            DataColumn infoColumn = table.Columns.Add("Info");

            foreach (DataRow row in table.Rows)
                if (Math.Pow((double)row["col1"], (double)row["col2"]) > 1000)
                    row["Info"] = 3;

            dataGridView1.DataSource = table;




--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Sharki
Дата 29.3.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Здрасте,я извеняюсь но может я что то не так написал,поэтому уточью мой вопрос.Есть datagridview в кот .загружаю из db,информацию:
Код

command = new SqlCommand();
            command.Connection = conn;
            adapter = new SqlDataAdapter(command);
            adapter = new SqlDataAdapter("Select dbo.WorkOrders.[Name],dbo.WorkOrders.[WorkCategoryID],dbo.WorkOrders.[Description],dbo.WorkOrders.[RequestedBy],dbo.WorkOrders.[FacilityID],dbo.WorkOrders.[IsEquipmentWO],dbo.WorkOrders.[IsDemandWO],dbo.WorkOrders.[IsOnHold],dbo.WorkOrders.[IsWaitingToBeCosted],dbo.WorkOrders.[IsWaitingForInvoice] from dbo.WorkOrders inner join dbo.WorkCategories on  (dbo.WorkOrders.WorkCategoryID = dbo.WorkCategories.WorkCategoryID) where WorkCategories.Name='" + cmb_Category.Text + "'", conn);

            //Initialize Dataset.
            ds = new DataSet();
            dataTable = ds.Tables.Add("DWO");
            //Fill dataset.
            adapter.Fill(ds, "DWO");
            //Fill Grid with dataset.
            dataGridView1.DataSource = ds.Tables["DWO"];
            lbl_qty.Text = "Count : " + dataTable.DefaultView.Count.ToString();
            dataGridView1.Columns["WorkCategoryID"].Visible = false;
            dataGridView1.Columns["Name"].Width = 500;



в dataGridView1 добовляются колонки,и 5 из них как checkbox(true или false),ручками я добовляю еще две колонки(через дизайнер)одна checkbox("Status"),вторая image("Info").Задача такая,как мне проверить все 5 колонок,и если в какой то колонке на какой то строке есть true то в колонке image напротив надо показать картинку(каждая колонка имеет свою картинку),так что если в одной колонке стоит check то в соответствии с этой колонкой и надо показывать картинку.Зарание огромное спасибо.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  1.JPG 21,29 Kb
PM MAIL   Вверх
Sharki
Дата 29.3.2009, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



next

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  2.JPG 22,64 Kb
PM MAIL   Вверх
Sharki
Дата 30.3.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Mikle  спасибо за пример,вот попробовал сделать как вы посоветовали
Код

ds = new DataSet();
            dataTable = ds.Tables.Add("DWO");

            DataColumn infoColumn = dataTable.Columns.Add("Info");

            foreach (DataRow row in dataTable.Rows)
                if (Math.Pow((double)row["col1"], (double)row["col2"]) > 1000)
                    row["Info"] = 3;



            //Fill dataset.
            adapter.Fill(ds, "DWO");

но как пробежатся по 5 колонкам,подскажите плиззз,очень нужно.Зарание огромное спасибо.
PM MAIL   Вверх
-Mikle-
Дата 30.3.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Вы про это?

Код

            foreach (DataRow row in dataTable.Rows)
            {
                bool result = false;
                // бежим по колонкам
                foreach(DataColumn col in dataTables.Columns)
                    result &= (bool)row[col];

                // если все колонки равны true
                if (result)
                    row["Info"] = 3;
                else
                    row["Info"] = 0;
            }



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Sharki
Дата 31.3.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Mikle  спасибо вам за пример,но я что то туплю,ничего не получается.Еще раз спасибо.
PM MAIL   Вверх
-Mikle-
Дата 31.3.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(Sharki @  31.3.2009,  19:37 Найти цитируемый пост)
Mikle  спасибо вам за пример

Незачто конечно! Всегда пожалуйста  smile 

[OFFTOPIC]
Цитата(Sharki @  31.3.2009,  19:37 Найти цитируемый пост)
но я что то туплю,ничего не получается

Я в таких случаях, покупаю пивка покрепче и чипсов побольше, одеваю наушники и включаю Баха часа на два... под пивко Бах канает только так!  smile 
А потом ложусь спать, а ночью, точнее под утро, как Менделееву, все решение снится  smile  Попробуйте, может и Вам поможет  smile 
[/OFFTOPIC]




--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Sharki
Дата 31.3.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Spasibo,poprobuyu smile ,no mne bi snachalo reshit eto delo,a potom mozhno i pivka.A to  smile na rabote i pivko s Baxom ne pomogut 
PM MAIL   Вверх
Sharki
Дата 31.3.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Mikle ,davay poprobuem eshe razok.Vot smotri chto u menya poluchilos:
Код

command = new SqlCommand();
            command.Connection = conn;
            adapter = new SqlDataAdapter(command);
            adapter = new SqlDataAdapter("Select dbo.WorkOrders.[Name],dbo.WorkOrders.[WorkCategoryID],dbo.WorkOrders.[Description],dbo.WorkOrders.[RequestedBy],dbo.WorkOrders.[FacilityID],dbo.WorkOrders.[IsEquipmentWO],dbo.WorkOrders.[IsDemandWO],dbo.WorkOrders.[IsOnHold],dbo.WorkOrders.[IsWaitingToBeCosted],dbo.WorkOrders.[IsWaitingForInvoice] from dbo.WorkOrders inner join dbo.WorkCategories on  (dbo.WorkOrders.WorkCategoryID = dbo.WorkCategories.WorkCategoryID) where WorkCategories.Name='" + cmb_Category.Text + "'", conn);


            //Initialize Dataset.
            ds = new DataSet();
            dataTable = ds.Tables.Add("DWO");

           //DataColumn infoColumn = dataTable.Columns.Add("Status");

            foreach (DataRow row in dataTable.Rows)
                if (Math.Pow((double)row["IsEquipmentWO"], (double)row["IsDemandWO"]) > 1000)
                //if (Math.Pow((double)row["IsEquipmentWO"], (double)row["IsDemandWO"], (double)row["IsOnHold"], (double)row["IsWaitingToBeCosted"], (double)row["IsWaitingForInvoice"]) > 1000)
                    row["Info"] = HippoDesk.Properties.Resources.dot_green;

            foreach (DataRow row in dataTable.Rows)
            {
                bool result = false;
                // бежим по колонкам
                foreach (DataColumn col in dataGridView1.Columns)
                    result &= (bool)row[col];

                // если все колонки равны true
                if (result)
                    row["Info"] = HippoDesk.Properties.Resources.dot_green;
                else
                    row["Info"] = HippoDesk.Properties.Resources.dot_red;
            }

            //Fill dataset.
            adapter.Fill(ds, "DWO");


            //Fill Grid with dataset.
            dataGridView1.DataSource = ds.Tables["DWO"];        
            
            lbl_qty.Text = "Count : " + dataTable.DefaultView.Count.ToString();
            dataGridView1.Columns["WorkCategoryID"].Visible = false;
                        

            dataGridView1.DataSource = dataTable;

            dataGridView1.AutoResizeColumns();

no eto ne rabotaet.
Vot sdes if (Math.Pow((double)row["IsEquipmentWO"], (double)row["IsDemandWO"]) > 1000)
mozhno vstavit imena 2 kolonok,a u menya ix 5.Tak kak bit,kak mne proytis po vsem 5 kolonkam
(row["IsEquipmentWO"], (double)row["IsDemandWO"], (double)row["IsOnHold"], (double)row["IsWaitingToBeCosted"], (double)row["IsWaitingForInvoice"])
i posmotret ,esli v kakoy to iz nix stoit galochka,to v zavisimosti v kakoy kolonke,nuzhno v kolonku"Info" dobovlat nuzhnuyu kartinku.
Spasibo tebe bolshoe zaranie.
PM MAIL   Вверх
-Mikle-
Дата 31.3.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(Sharki @  31.3.2009,  22:57 Найти цитируемый пост)
Vot sdes if (Math.Pow((double)row["IsEquipmentWO"], (double)row["IsDemandWO"]) > 1000)

мда, тебе действительно надо отдохнуть немного... такое бывает... Math.Pow(..., ...) это математическая ф-ия возведения в степень! Я ее написал просто для примера! Я ведь не знал что у тебя там за задача, и просто написал какое-то вычисление над колонками...

Ок, ладно...

Если ты уверен что колонки IsEquipmentWO, IsDemandWO, IsOnHold, IsWaitingToBeCosted, IsWaitingForInvoice - имеют тип bool (принимают значения true или false), то вот:

Код

            command = new SqlCommand();
            command.Connection = conn;
            adapter = new SqlDataAdapter(command);
            adapter = new SqlDataAdapter("Select dbo.WorkOrders.[Name],dbo.WorkOrders.[WorkCategoryID],dbo.WorkOrders.[Description],dbo.WorkOrders.[RequestedBy],dbo.WorkOrders.[FacilityID],dbo.WorkOrders.[IsEquipmentWO],dbo.WorkOrders.[IsDemandWO],dbo.WorkOrders.[IsOnHold],dbo.WorkOrders.[IsWaitingToBeCosted],dbo.WorkOrders.[IsWaitingForInvoice] from dbo.WorkOrders inner join dbo.WorkCategories on  (dbo.WorkOrders.WorkCategoryID = dbo.WorkCategories.WorkCategoryID) where WorkCategories.Name='" + cmb_Category.Text + "'", conn);


            //Initialize Dataset.
            ds = new DataSet();
            dataTable = ds.Tables.Add("DWO");

           //DataColumn infoColumn = dataTable.Columns.Add("Status");

            foreach (DataRow row in dataTable.Rows)
                    row["Info"] = HippoDesk.Properties.Resources.dot_green;

            foreach (DataRow row in dataTable.Rows)
            {
                // !!! для примера, здесь я проверяю, если колонка IsEquipmentWO=true ИЛИ IsDemandWO=true
                // --- вот отсюда
                if ( row["IsEquipmentWO"].Equals(true) || row["IsDemandWO"].Equals(true) )
                    row["Info"] = HippoDesk.Properties.Resources.dot_green;
                else
                    row["Info"] = HippoDesk.Properties.Resources.dot_red;
                // --- и до сюда, реализуй свой алгоритм присвоения значений колонке Info, в зависимости от твоих 5 колонок
            }

            //Fill dataset.
            adapter.Fill(ds, "DWO");

            //Fill Grid with dataset.
            dataGridView1.DataSource = ds.Tables["DWO"];        

            lbl_qty.Text = "Count : " + dataTable.DefaultView.Count.ToString();
            dataGridView1.Columns["WorkCategoryID"].Visible = false;

            dataGridView1.DataSource = dataTable;
            dataGridView1.AutoResizeColumns(); 



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Sharki
Дата 31.3.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Спасибо тебе огромное за пример,но почему то он не срабатывает,вот посмотри на картинке,если в колонке "IsDemandWO" стоят галочки то в "Info" должни быть картинки кот.соответствуют этой колонке,а они почему то не появляются :(,а если бы в других колонках стояли,то и картинки должны быть соответствующие ,а иногда бывает что в двух колонках стоят галочки на одной строке,тогда надо другую картинку показать.Подскажи как.СПАСИБО тебе большое.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  datagridview.jpg 393,42 Kb
PM MAIL   Вверх
-Mikle-
Дата 31.3.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59





Он срабатывает. Просто вот это
Цитата(-Mikle- @  1.4.2009,  00:20 Найти цитируемый пост)

            foreach (DataRow row in dataTable.Rows)
            {
                // !!! для примера, здесь я проверяю, если колонка IsEquipmentWO=true ИЛИ IsDemandWO=true
                // --- вот отсюда
                if ( row["IsEquipmentWO"].Equals(true) || row["IsDemandWO"].Equals(true) )
                    row["Info"] = HippoDesk.Properties.Resources.dot_green;
                else
                    row["Info"] = HippoDesk.Properties.Resources.dot_red;
                // --- и до сюда, реализуй свой алгоритм присвоения значений колонке Info, в зависимости от твоих 5 колонок
            }

Надо вынести в отдельный метод и вызывать его при изменении значения колонки. Ну надо же чуток подумать тебе... Не мне же одному мозговой деятельностью заниматься...

Код

.............................
.....................
........................
            //Initialize Dataset.
            ds = new DataSet();
            dataTable = ds.Tables.Add("DWO");
            // !!! Это событие вызывается каждый раз при изменении значения любой колонки
            dataTable.ColumnChanged += new DataColumnChangeEventHandler(dataTable_ColumnChanged);
.....................
.............
........................


вот обработчик:
Код

        private void dataTable_ColumnChanged(object sender, DataColumnChangeEventArgs e)
        {
            string colName = e.Column.ColumnName;

            // проверяем, если изменились данные в 
            // одном из нужных тебе столбцах, то делаем то, что нам нужно
            if (colName == "IsEquipmentWO" || colName == "IsDemandWO" || colName == "IsOnHold" || colName == "IsWaitingToBeCosted" || colName == "IsWaitingForInvoice")
                this.CahngeInfoColumn(e.Row);
        }


вот метод:
Код

        private void CahngeInfoColumn(DataRow row)
        {
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // !!!!! для примера, здесь я проверяю, если колонка (IsEquipmentWO = true) ИЛИ (IsDemandWO = true)
            // вот отсюда
            if (row["IsEquipmentWO"].Equals(true) || row["IsDemandWO"].Equals(true))
                row["Info"] = HippoDesk.Properties.Resources.dot_green;
            else
                row["Info"] = HippoDesk.Properties.Resources.dot_red;
            // и до сюда,
            // !!!!! реализуй свой алгоритм присвоения значений колонке Info, в зависимости от твоих 5 колонок
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        }


и замени вот это
Код

....................
........................
...............
            foreach (DataRow row in dataTable.Rows)
            {
                // !!! для примера, здесь я проверяю, если колонка IsEquipmentWO=true ИЛИ IsDemandWO=true
                // --- вот отсюда
                if (row["IsEquipmentWO"].Equals(true) || row["IsDemandWO"].Equals(true))
                    row["Info"] = HippoDesk.Properties.Resources.dot_green;
                else
                    row["Info"] = HippoDesk.Properties.Resources.dot_red;
                // --- и до сюда, реализуй свой алгоритм присвоения значений колонке Info, в зависимости от твоих 5 колонок
            }
.................
............
...................


на это
Код

...........
.......
            foreach (DataRow row in dataTable.Rows)
                this.CahngeInfoColumn(row);
..................
.........



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Sharki
Дата 1.4.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 15.1.2005

Репутация: нет
Всего: нет



Mikle Спасибо огроменное.Всё работает как часы.СПАСИБО.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1022 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.