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); } } }
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); } } }