| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > [.Net] Как выбрать несколько ячеек в таблице?

[.Net] Как выбрать несколько ячеек в таблице?

Ответ
Поиск в этой теме
Непрочитано 04.11.2012, 01:48 #1
[.Net] Как выбрать несколько ячеек в таблице?
Modis
 
Липецк, Москва
Регистрация: 12.06.2010
Сообщений: 534

Всем привет. Порыскал тут по просторам тырнета, но ответа так и не нашел. В общем-то сабж - как выбрать несколько ячеек (диапазон) в таблице?
У меня конечно есть мысль, что по принципу выбора одной ячейки, только указывая две точки (получим две ячейки, по ним как-то получим диапазон ячеек). Но прежде чем приступить к такому мазохизму, хочется услышать мнение более опытных - возможно есть простой вариант?
Просмотров: 2526
 
Непрочитано 04.11.2012, 10:29
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Попробуй выделять регион:
Код:
[Выделить все]
CellRange.Create( table, firstrow, firstcolumn,  lastrow, lastcolumn  );
или что-то вроде, см. опции в IntelliSence
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 04.11.2012, 12:51
#3
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Олег (jr.), вопрос не в том, как в коде создать диапазон ячеек )) Вопрос - как сделать, чтобы пользователь выбрал диапазон ячеек?
Modis вне форума  
 
Непрочитано 04.11.2012, 13:05
#4
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Modis, простым выбором рамкой
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 04.11.2012, 13:45
#5
SergeyAB


 
Сообщений: n/a


что за таблица? DataGrid? IMHO проще всего создать лист экселя, ну и поставить нужные аттрибуты на него, по работе с экселем в Net куча всего есть...
 
 
Непрочитано 04.11.2012, 14:30
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от SergeyAB Посмотреть сообщение
проще всего создать лист экселя
и разместить его в облаке
gomer вне форума  
 
Автор темы   Непрочитано 05.11.2012, 01:26
#7
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от SergeyAB Посмотреть сообщение
что за таблица? DataGrid? IMHO проще всего создать лист экселя, ну и поставить нужные аттрибуты на него, по работе с экселем в Net куча всего есть...
Если-бы речь шла о DataGrid (тем более я предпочитаю GridView), то вопрос бы задавался не на этом форуме
Цитата:
Сообщение от gomer Посмотреть сообщение
и разместить его в облаке
Гы
Цитата:
Сообщение от zenon Посмотреть сообщение
Modis, простым выбором рамкой
Начал пробовать примерно так:
Код:
[Выделить все]
PromptPointOptions ppoF = new PromptPointOptions("first point: ");
PromptPointResult pprF = ed.GetPoint(ppoF);
if (pprF.Status != PromptStatus.OK) return;

PromptCornerOptions pco = new PromptCornerOptions("second point: ", pprF.Value);
PromptPointResult pprS = ed.GetCorner(pco);
if (pprS.Status != PromptStatus.OK) return;

PromptSelectionResult SelRes = ed.SelectCrossingWindow(pprF.Value, pprS.Value);
Но естественно в SelRes у меня не оказывается ячеек
Modis вне форума  
 
Непрочитано 05.11.2012, 08:27
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813



Используй TableHitTestInfo:

Код:
[Выделить все]
     [CommandMethod("Eh")]
        public void ExamineHitTest()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            Transaction tr = db.TransactionManager.StartTransaction();
            using ((tr))
            {
                try
                {
                    PromptEntityOptions peo = new PromptEntityOptions("\nSelect a table: ");

                    peo.SetRejectMessage("\nYou must select a table: ");

                    peo.AddAllowedClass(typeof(Table), true);

                    PromptEntityResult res = ed.GetEntity(peo);

                    DBObject obj = tr.GetObject(res.ObjectId, OpenMode.ForWrite);

                    if (!(obj is Table))
                    {
                        return;
                    }
                    Table tbl = (Table)obj;

                    tbl.SuppressRegenerateTable(false);

                    PromptPointOptions ppo = new PromptPointOptions("\nPick a point within the cell to start from >>");

                    PromptPointResult ptres = default(PromptPointResult);

                    ptres = ed.GetPoint(ppo);

                    if ((ptres.Status != PromptStatus.OK))
                    {
                        return;
                    }
                    Point3d pickPt = ptres.Value;

                    TableHitTestInfo ht = default(TableHitTestInfo);

                    ht = tbl.HitTest(pickPt, Vector3d.ZAxis);

                    if (!(ht.Type == TableHitTestType.Cell))
                    {
                        ed.WriteMessage("You missed, Modis,\npick a point inside the cell only");
                    }
                    int row = ht.Row;

                    int col = ht.Column;
     
                    peo = new PromptEntityOptions("\nPick a Text or MText (or hit Enter to Exit): ");

                    peo.SetRejectMessage("\nYou must select a text or mtext: ");

                    peo.AddAllowedClass(typeof(DBText), false);

                    peo.AddAllowedClass(typeof(MText), false);

                    PromptEntityResult entres;

                    do
                    {
                        entres = ed.GetEntity(peo);

                        if (entres.Status != PromptStatus.OK)
                        {
                            if (entres.Status == PromptStatus.Cancel)
                            {
                                break;
                            }

                        }
                        else
                        {
                            Entity oent = (Entity)tr.GetObject(entres.ObjectId, OpenMode.ForRead);
                            // cast if object is of type Mtext
                            if ((oent) is MText)
                            {
                                if (row < tbl.Rows.Count)
                                {
                                    MText mtx = (MText)oent;
                                    string strval = mtx.Contents;

                                    // tbl.SetTextString(row, col, 0, strval);//  A2009
                                    //--------- A2010: ----------------------
                                    tbl.Cells[row, col].Contents[0].TextString = strval;//   A2010
                                    //---------------------------------------
                                    tr.TransactionManager.QueueForGraphicsFlush();// to display newly created objects at run-time
                                }
                                else
                                {
                                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("End of column has been reached");
                                    break;
                                }
                                row += 1;

                            }
                            else
                            {
                                // cast if object is of type Text
                                if ((oent) is DBText)
                                {
                                    if (row < tbl.Rows.Count)
                                    {
                                        DBText txt = (DBText)oent;
                                        string strval = txt.TextString;
                                        // tbl.SetTextString(row, col, strval);//    A2009
                                        //--------- A2010: ----------------------
                                        tbl.Cells[row, col].Contents[0].TextString = strval;//   A2010
                                        //---------------------------------------
                                        tr.TransactionManager.QueueForGraphicsFlush();// to display newly created objects at run-time
                                    }
                                    else
                                    {
                                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("End of column has been reached");
                                        break;
                                    }
                                    row += 1;
                                }

                            }

                        }
                        
                       tbl.RecomputeTableBlock(true);

                    } while (res.Status == PromptStatus.OK);

                   tbl.RecordGraphicsModified(true);

                    tr.Commit();

                }
                catch (System.Exception ex)
                {
                    ed.WriteMessage(ex.ToString());

                }
                finally
                {
                    //do nothing
                }
            }
        }
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 05.11.2012, 12:04
#9
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Олег (jr.), спасибо! Ваш код конечно мне не понадобился, но пока я его смотрел, то родилась идея ))
Примерно так:
Код:
[Выделить все]
                Database db = AcApp.DocumentManager.MdiActiveDocument.Database;
                Editor ed = AcApp.DocumentManager.MdiActiveDocument.Editor;

                PromptEntityOptions peo = new PromptEntityOptions("\nSelect table: ");
                peo.SetRejectMessage("\n");
                peo.AddAllowedClass(typeof(Table), false);
                PromptEntityResult per = ed.GetEntity(peo);
                if (per.Status != PromptStatus.OK) return;
                
                PromptPointOptions ppoF = new PromptPointOptions("first corner: ");
                PromptPointResult pprF = ed.GetPoint(ppoF);
                if (pprF.Status != PromptStatus.OK) return;
                Vector3d vector = new Vector3d(0.0, 0.0, 1.0);
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    ObjectId entId = per.ObjectId;
                    Table tbl = (Table)tr.GetObject(entId, OpenMode.ForRead);
                    TableHitTestInfo htF = tbl.HitTest(pprF.Value, vector);
                    if (htF.Type != TableHitTestType.Cell) return;

                    PromptCornerOptions pco = new PromptCornerOptions("second corner: ", pprF.Value);
                    PromptPointResult pprS = ed.GetCorner(pco);
                    if (pprS.Status != PromptStatus.OK) return;
                    TableHitTestInfo htS = tbl.HitTest(pprS.Value, vector);
                    if (htS.Type != TableHitTestType.Cell) return;

                    //тут уже не интересный код ;)

                    tr.Commit();
                }
Modis вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > [.Net] Как выбрать несколько ячеек в таблице?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в таблице просуммировать несколько отдельных ячеек и вводить уравнение?ACAD2010_rus v4dEr AutoCAD 4 04.03.2016 12:21
Цвет границ ячеек в таблице. shartal AutoCAD 1 01.02.2011 19:33
Почему невозможно выбрать формат ячейки в таблице? МишаИнженер AutoCAD 8 10.11.2010 10:46
Размер текста в таблице, связанной с файлом Excel TheMouther AutoCAD 2 09.12.2009 08:19