如何通过IList中的列名获取列的索引?

时间:2014-04-30 05:08:24

标签: c# asp.net visual-studio-2012 sql-server-2008-r2 linq-to-entities

如果这恰好是一个简单的问题,我很抱歉,但我对编码很新。我已经用这个问题撞了一堵墙,现在已经连续好几天了,已经做了很多互联网搜索,但我一直空手而归。

我已将数据库视图中的数据捕获到IList中。因为数据来自一个视图,并且可能(可能)改变列的显示顺序,如果需要进行更改(添加列等),我想以编程方式从IList通过以下方式提取列的索引。列名。

这很容易与gridview一起使用,因为它有一个很好的" HeaderRow"允许我编写一些代码来循环遍历任何行并拉出headerRow名称的属性,将其与我查找的名称进行比较,然后在找到它时拉出递增的计数,并且Voila!,I然后有索引。

问题是,我试图避免必须从已经从数据库本身复制的实体框架复制到另一个容器(gridview)的列表中复制数据,以便必须对其进行操作。看起来它似乎变得不必要地涉及网格视图。

所以,如果有人能告诉我IList类的有用属性是否可用于通过列名获取列索引#,请告诉我并多多谢谢!

编辑:

回应nvoigt的评论" IList对列没有任何了解。"

我确定它必须有一些想法,因为当我单步执行代码并查看IList中的第一行数据时,它在那里有列名(" AppAnswer"等等) )。我想要的只是一些方法来查看它们并确定(通过属性或代码)列名称所依据的索引。见照片澄清。
我必须在此处链接,因为我的代表不够高,不能发布照片:https://www.dropbox.com/s/2xg3nduhqnzbl8n/ILisst.JPG

此外,这是从视图中捕获数据并将其放入列表的代码:

IList<View_AppQnA_All> list1 = useful.GetQuestionAnswerListForJobPosition(1);

public IList<View_AppQnA_All> GetQuestionAnswerListForJobPosition(int jobID)
{
    IList<View_AppQnA_All> QuestionAnswerList = new List<View_AppQnA_All>();

    IQueryable<View_AppQnA_All> view = Repository.Current.ObjectContext.
                View_AppQnA_All.Where(Q => Q.AppQuestionForJobPosition == jobID);
    QuestionAnswerList = view.ToList<View_AppQnA_All>();

    return QuestionAnswerList;
}

#region Imports
using System;
using System.Drawing;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccess;
#endregion

namespace AOJobApplication
{
    class Repository
    {
        #region Declarations

        private static Repository m_instance;
        private static AOApplicationContext CWEntities;
        // Lock synchronization object
        //private static object syncLock = new object();
        private static readonly object syncLock = new object();

        #endregion

        #region Properties

        /// <summary>
        /// Returns the one and only Repository
        /// </summary>
        public static Repository Current
        {
            get
            {
                if (m_instance == null)
                {
                    lock (syncLock)
                    {
                        if (m_instance == null)
                        {
                            m_instance = new Repository();
                        }
                    }
                }

                return m_instance;
            }
        }

        #endregion

        /// <summary>
        /// Object context to get entity objects application void
        /// </summary>
        public AOApplicationContext ObjectContext
        {
            get
            {
                if (CWEntities != null)
                {
                    return CWEntities;
                }
                else
                {
                    CWEntities = new AOApplicationContext();

                    return CWEntities;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您存储在列表中的对象具有以您的视图为模型的属性。班级中的属性没有任何顺序。它们只是属性,它们彼此相邻。您可以以任何您喜欢的方式对它们进行排序,Visual Studio调试器似乎按名称对它们进行排序。

生成这些类,而不是动态构建。如果您的视图发生了巨大变化(我猜不仅仅是字段顺序),您将不得不再次生成它们。这意味着重新编译。