예제 #1
0
        internal void EnsureItems(RowCell cell)
        {
            if (m_EnsuredItems)
            {
                return;
            }
            m_EnsuredItems = true;
            Items.Clear();
            if (string.IsNullOrEmpty(m_ForeignDataSource.DataSourceId))
            {
                if (m_MatrixTable == null)
                {
                    throw new GridException("MatrixTable must be set");
                }

                foreach (Row row in m_ForeignDataSource.Rows)
                {
                    if (row[ForeignIdentityColumn].Value == null)
                    {
                        continue;
                    }
                    ManyToManyItem i = new ManyToManyItem
                    {
                        Value       = row[ForeignIdentityColumn].Value.ToString(),
                        DisplayText = row[ValueColumn].Value.ToString(),
                        Checked     = false,
                        ParentId    = (TreeParentId != null ? string.Empty : null)
                    };
                    Items.Add(i);
                }
            }
            else
            {
                m_ForeignDataSource.GetSchema();

                StringBuilder sql       = new StringBuilder(string.Empty);
                Query         q         = null;
                string        matrixkey = null;
                if (cell.Row[MatrixIdentityColumn].Value != null)
                {
                    matrixkey = cell.Row[MatrixIdentityColumn].Value.ToString();
                }
                try
                {
                    // FAENFAEN Må flyttes over i DBInterface
                    sql = new StringBuilder(string.Empty);
                    sql.AppendFormat("SELECT {0},{1} ", ForeignIdentityColumn,
                                     ValueColumn);
                    if (matrixkey != null)
                    {
                        sql.AppendFormat(",(SELECT COUNT(*) FROM [{0}] WHERE ", MatrixDataSource);
                        sql.AppendFormat("{0} = {1} AND ", ForeignIdentityColumn, Interface.BuildTableElement(true, m_ForeignDataSource.DataSourceId,
                                                                                                              ForeignIdentityColumn));
                        sql.AppendFormat(
                            !m_Table.Columns[MatrixIdentityColumn].HasDataSourceQuote ? "{0} = {1}" : "{0} = '{1}'",
                            MatrixIdentityColumn, matrixkey);

                        if (string.IsNullOrEmpty(FilterExpression) == false)
                        {
                            sql.AppendFormat(" AND {0}", FilterExpression);
                        }
                        sql.Append(" ) ");
                    }
                    if (string.IsNullOrEmpty(TreeParentId) == false)
                    {
                        sql.AppendFormat(", {0} as ParentID ", TreeParentId);
                    }
                    sql.AppendFormat(" FROM [{0}]", m_ForeignDataSource.DataSourceId);
                    if (string.IsNullOrEmpty(FilterExpression) == false)
                    {
                        sql.AppendFormat(" WHERE {0}", FilterExpression);
                    }

                    if (string.IsNullOrEmpty(SortExpression) == false)
                    {
                        sql.AppendFormat(" ORDER BY {0}", SortExpression);
                    }

                    q = Query.ExecuteReader(sql.ToString(), m_ForeignDataSource.ConnectionString, Grid.DatabaseConnectionType);
                    while (q.Read())
                    {
                        ManyToManyItem i = new ManyToManyItem();
                        i.Value       = q[0].ToString();
                        i.DisplayText = q[1].ToString();
                        i.ParentId    = (TreeParentId != null ? q["ParentID"].ToString() : null);
                        i.Checked     = matrixkey != null && q[2].ToString() != "0";

                        Items.Add(i);
                    }
                    q.Close();
                }
                catch (Exception ee)
                {
                    if (q != null)
                    {
                        q.Close();
                    }
                    throw new GridException(sql.ToString(), "Error retrieving data for many-to-many sql", ee);
                }

                if (Grid.Debug)
                {
                    Grid.m_DebugString.AppendFormat("<b>Many-To-Many ({0})</b>: {1}<br/>", ColumnId, sql);
                }
            }
        }
예제 #2
0
        internal void EnsureItems(RowCell cell)
        {
            if (m_EnsuredItems)
                return;
            m_EnsuredItems = true;
            Items.Clear();
            if (string.IsNullOrEmpty(m_ForeignDataSource.DataSourceId))
            {
                if (m_MatrixTable == null)
                    throw new GridException("MatrixTable must be set");

                foreach (Row row in m_ForeignDataSource.Rows)
                {
                    if (row[ForeignIdentityColumn].Value == null)
                        continue;
                    ManyToManyItem i = new ManyToManyItem
                                           {
                                               Value = row[ForeignIdentityColumn].Value.ToString(),
                                               DisplayText = row[ValueColumn].Value.ToString(),
                                               Checked = false,
                                               ParentId = (TreeParentId != null ? string.Empty : null)
                                           };
                    Items.Add(i);
                }

            }
            else
            {
                m_ForeignDataSource.GetSchema();

                StringBuilder sql = new StringBuilder(string.Empty);
                Query q = null;
                string matrixkey = null;
                if (cell.Row[MatrixIdentityColumn].Value != null)
                    matrixkey = cell.Row[MatrixIdentityColumn].Value.ToString();
                try
                {
                    // FAENFAEN Må flyttes over i DBInterface
                    sql = new StringBuilder(string.Empty);
                    sql.AppendFormat("SELECT {0},{1} ", ForeignIdentityColumn,
                                     ValueColumn);
                    if (matrixkey != null)
                    {
                        sql.AppendFormat(",(SELECT COUNT(*) FROM [{0}] WHERE ", MatrixDataSource);
                        sql.AppendFormat("{0} = {1} AND ", ForeignIdentityColumn, Interface.BuildTableElement(true, m_ForeignDataSource.DataSourceId,
                                         ForeignIdentityColumn));
                        sql.AppendFormat(
                            !m_Table.Columns[MatrixIdentityColumn].HasDataSourceQuote ? "{0} = {1}" : "{0} = '{1}'",
                            MatrixIdentityColumn, matrixkey);

                        if (string.IsNullOrEmpty(FilterExpression) == false)
                            sql.AppendFormat(" AND {0}", FilterExpression);
                        sql.Append(" ) ");
                    }
                    if (string.IsNullOrEmpty(TreeParentId) == false)
                        sql.AppendFormat(", {0} as ParentID ", TreeParentId);
                    sql.AppendFormat(" FROM [{0}]", m_ForeignDataSource.DataSourceId);
                    if (string.IsNullOrEmpty(FilterExpression) == false)
                        sql.AppendFormat(" WHERE {0}", FilterExpression);

                    if (string.IsNullOrEmpty(SortExpression) == false)
                        sql.AppendFormat(" ORDER BY {0}", SortExpression);

                    q = Query.ExecuteReader(sql.ToString(), m_ForeignDataSource.ConnectionString, Grid.DatabaseConnectionType);
                    while (q.Read())
                    {
                        ManyToManyItem i = new ManyToManyItem();
                        i.Value = q[0].ToString();
                        i.DisplayText = q[1].ToString();
                        i.ParentId = (TreeParentId != null ? q["ParentID"].ToString() : null);
                        i.Checked = matrixkey != null && q[2].ToString() != "0";

                        Items.Add(i);
                    }
                    q.Close();
                }
                catch (Exception ee)
                {
                    if (q != null)
                        q.Close();
                    throw new GridException(sql.ToString(), "Error retrieving data for many-to-many sql", ee);
                }

                if (Grid.Debug)
                {
                    Grid.m_DebugString.AppendFormat("<b>Many-To-Many ({0})</b>: {1}<br/>", ColumnId, sql);
                }
            }
        }