开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 8486|回复: 1

(我项目正在用的)关于xpo动态加载 多主键数据表的代码。

[复制链接]

0

精华

5

贡献

13

赞扬

帖子
113
软币
647
在线时间
71 小时
注册时间
2013-8-12
发表于 2015-2-13 09:13:48 | 显示全部楼层 |阅读模式


namespace 成果查询分析器.TableView
{
    public partial class uc_TableViewByXpoServer : DevExpress.XtraEditors.XtraUserControl
    {
        public string TableName { get; set; }
        public string ConnectionString { get; set; }

        public DevExpress.XtraGrid.Views.Grid.GridView MainGridView { get { return gridView1; } }

        XPServerCollectionSource XPServerCollectionSource;

        public uc_TableViewByXpoServer()
        {
            InitializeComponent();
        }

        public uc_TableViewByXpoServer(string _ConnectionString, string _TableName)
        {
            // TODO: Complete member initialization
            this.ConnectionString = _ConnectionString;
            this.TableName = _TableName;

            InitializeComponent();

            lbl_TableName.Text = this.TableName;
        }



        private void btn_Reload_Click(object sender, EventArgs e)
        {
            LoadData();
        }

        private void LoadData()
        {
            string sMyView = "我的表名";
            sMyView = TableName;
            ReflectionDictionary dict = new ReflectionDictionary();
            //  XPClassInfo ciTask = dict.CreateClass(sMyView);
            XPClassInfo classInfo = new XPDataObjectClassInfo(dict.GetClassInfo(typeof(LiteDataObject)), sMyView);
           // SqlConnection dbConn = new SqlConnection("server=.;Database=Solution2;Integrated Security=True;");
            SqlConnection dbConn = new SqlConnection(ConnectionString);

            dbConn.Open();

            SqlCommand cmd = new SqlCommand(string.Format("Select  top 0 * from [{0}]", sMyView), dbConn);
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);
            using (DataTable table = new DataTable("mytable"))
            {
                table.Load(reader);
                dbConn.Close();

                if (table.PrimaryKey.Count() == 1)
                {
                    DataColumn col = table.PrimaryKey[0];
                    classInfo.CreateMember(col.ColumnName, col.DataType, new KeyAttribute());
                }
                else if (table.PrimaryKey.Count() > 1)
                {

                    XPComplexCustomMemberInfo compositeKey = new XPComplexCustomMemberInfo(classInfo, "Key", typeof(object), new Attribute[] { new KeyAttribute(), new BrowsableAttribute(false) });
                    foreach (DataColumn col in table.PrimaryKey)
                    {
                        compositeKey.AddSubMember(col.ColumnName, col.DataType, new Attribute[] { new PersistentAttribute(col.ColumnName), new BrowsableAttribute(false) });
                    }
                }

                foreach (DataColumn col in table.Columns)
                {
                    if (classInfo.GetPersistentMember(col.ColumnName) == null)
                    {
                        //图形格式的字段不显示
                        if (col.DataType.Name != "Byte[]")
                        {
                            classInfo.CreateMember(col.ColumnName, col.DataType);
                        }
                    }
                }
            }

            XpoDefault.DataLayer = XpoDefault.GetDataLayer(this.ConnectionString, dict, DevExpress.Xpo.DB.AutoCreateOption.None);

            Session sessionNext = new Session();

            XPServerCollectionSource collectionSource = new XPServerCollectionSource(sessionNext, classInfo);


            gridControl1.DataSource = null;
            gridControl1.DataSource = collectionSource;

            gridView1.OptionsView.ColumnAutoWidth = false;
            gridView1.BestFitColumns();
            if (gridView1.Columns.Count > 0 && gridView1.Columns[0].Summary.Count == 0)
            {
                gridView1.Columns[0].Summary.Add(DevExpress.Data.SummaryItemType.Count);
            }
        }

        private void btn_SaveToXlsx_Click(object sender, EventArgs e)
        {


        }








        private void uc_TableViewByXpoServer_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        private void 保存过滤条件ToolStripMenuItem_Click(object sender, EventArgs e)
        {



            saveFilter();
        }

        private void saveFilter()
        {
            DevExpress.Data.Filtering.CriteriaOperator criteria = this.gridView1.ActiveFilterCriteria;


            string 过滤器内容=criteria.ToString();
            string sql_filterString = DevExpress.Data.Filtering.CriteriaToWhereClauseHelper.GetMsSqlWhere(criteria);


             SaveFileDialog sFD = new SaveFileDialog();
             sFD.DefaultExt = "HyFilter";
            sFD.Filter = "过滤器文件(*.HyFilter)|*.HyFilter";

            //文件名自动加上时间标记
            sFD.FileName = TableName + "_过滤器 " + DateTime.Now.ToString("yyyy-MM-dd HHmmss");

            sFD.OverwritePrompt = true;


            if (sFD.ShowDialog() == DialogResult.OK)
            {
                string saveFileName = sFD.FileName;


                if (File.Exists(saveFileName))
                {
                    File.Delete(saveFileName);

                }

                File.AppendAllText(sFD.FileName, 过滤器内容,Encoding.UTF8);
            }





           //


        }

        private void 加载过滤条件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            loadFilter();
        }

        private void loadFilter()
        {


            OpenFileDialog oFD = new OpenFileDialog();
            oFD.DefaultExt = "HyFilter";
            oFD.Filter = "过滤器文件(*.HyFilter)|*.HyFilter|过滤器文本(*.HyFilter.txt)|*.HyFilter.txt";

            if (oFD.ShowDialog() == DialogResult.OK)
            {
                string 过滤器内容 = File.ReadAllText(oFD.FileName, Encoding.Default);

                this.gridView1.ActiveFilterCriteria = DevExpress.Data.Filtering.CriteriaOperator.Parse(过滤器内容, null);

            }





        }

        private void 设置过滤条件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.gridView1.ShowFilterEditor(gridView1.Columns[0]);
        }









    }









    [NonPersistent, OptimisticLocking(false)]
    public class LiteDataObject : XPBaseObject
    {
        public LiteDataObject(Session session, XPClassInfo ci) : base(session, ci) { }
        public LiteDataObject(Session session) : base(session) { }
    }


}


评分

参与人数 3赞扬 +3 收起 理由
hanlilong2004 + 1 赞一个
monica010 + 1 感谢分享
dev学习交流 + 1 赞一个

查看全部评分

回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
30
软币
152
在线时间
6 小时
注册时间
2015-4-3
发表于 2015-4-7 11:21:20 | 显示全部楼层
很好的代码演示
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 00:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表