예제 #1
0
        private void DynamicStuff(TableLayoutPanel table)
        {
            //I'm thinking about adding a database table
            //linked to records that will handle special
            //cases like dates that need calendars, validation,
            //dropdownlists, checkboxes, radio buttons, etc.
            //Maybe for dropdownlists have recordsets prepared ahead
            //to return as part of payload.

            //
            //Need to practice addding title to top of screen while
            //retaining docked table.

            //Start - Can loop this to get most labels and entry.

            //Switch on type
            //case most:

            int curCol = 1;
            DataRow detailRow = DataSource[0].Rows[0];

            for (int i = 0; i < ColumnNames.Count; i++)
            {
                Label label1 = new Label();
                label1.Text = ColumnNames[i];
                table.Controls.Add(label1, curCol, i);

                //DataRow drSpecial = DataSource[1].Rows.Find(ColumnNames[i]);

                var drSpecial = MetaList.Find(x => x.FieldName == ColumnNames[i]);

                if (drSpecial != null)
                {
                    ColumnMetaData m = new ColumnMetaData();

                    if (drSpecial.ControlType.Contains("DropDownList"))
                    {
                        int resultTableIndex = 0;
                        //This gets table index from Control Type comma delimited
                        //if a ComboBox. Start index at 2 because 1=Detail row and
                        //2=Meta data table.
                        int.TryParse(drSpecial.ControlType.Split(',')[1], out resultTableIndex);

                        ComboBox cmb = new ComboBox();

                        foreach (DataRow item in DataSource[resultTableIndex].Rows)
                        {
                            cmb.Items.Add(item["Text"].ToString());
                        }

                        cmb.SelectedText = detailRow[i].ToString();

                        table.Controls.Add(cmb, drSpecial.ColumnPosition + 1, i);
                    }
                }
                else //Just use standard textbox for input.
                {
                    TextBox textbox1 = new TextBox();
                    textbox1.Text = detailRow[i].ToString();
                    table.Controls.Add(textbox1, curCol + 1, i);
                }
            }

            //case check:
            //case dropdownlist:
            //case date calendar:
            //End - Can loop this to get most labels and entry.

            //Label label2 = new Label();
            //label2.Text = ColumnNames[1];
            //TextBox tbName = new TextBox();
            //tbName.Text = DataRow1[1].ToString();
            //tbName.Width = 200;

            //table.Controls.Add(label1, 1, 1);
            //table.Controls.Add(label2, 1, 2);
            //table.Controls.Add(tbId, 2, 1);
            //table.Controls.Add(tbName, 2, 2);
        }
예제 #2
0
파일: Form1.cs 프로젝트: rodchar/csgen
        private List<DataTable> GetRecord()
        {
            string queryString = string.Format(
            @"

            --Detail Row
            SELECT * FROM {0} WHERE CustomerID=@search;

            --Supporting Data for detail page.
            DECLARE @tableName NVARCHAR(50) = 'Customers'
            DECLARE @stmt NVARCHAR(MAX);

            SELECT * FROM SpecialTable1 WHERE TableName = @tableName;

            DECLARE @SqlStatementCursor CURSOR
            SET @SqlStatementCursor = CURSOR FAST_FORWARD
            FOR
            SELECT SqlStatements
            FROM SpecialTable1 WHERE TableName = @tableName;
            OPEN @SqlStatementCursor
            FETCH NEXT FROM @SqlStatementCursor
            INTO @stmt
            WHILE @@FETCH_STATUS = 0
            BEGIN

            EXEC (@stmt)

            FETCH NEXT FROM @SqlStatementCursor
            INTO @stmt
            END
            CLOSE @SqlStatementCursor
            DEALLOCATE @SqlStatementCursor

            ", TABLE_NAME);

            List<DataTable> list = GetDatabaseRecords(queryString, RECORD_ID);

            ucDetailView1.ColumnNames = new List<string>();

            //How do I get column names to print in this C# program?
            //http://stackoverflow.com/a/2557943/139698
            foreach (DataColumn item in list[0].Columns)
            {
                ucDetailView1.ColumnNames.Add(item.ColumnName);
            }

            List<ColumnMetaData> meta = new List<ColumnMetaData>();

            DataTable dt1 = list[1];
            //dt1.PrimaryKey = new DataColumn[] { dt1.Columns["FieldName"] };

            foreach (DataRow dr in dt1.Rows)
            {
                ColumnMetaData c = new ColumnMetaData();
                c.FieldName = dr["FieldName"].ToString();
                int colPos = 0;
                int.TryParse(dr["ColumnPosition"].ToString(), out colPos);
                c.ColumnPosition = colPos;
                int rowPos = 0;
                int.TryParse(dr["RowPosition"].ToString(), out rowPos);
                c.RowPosition = rowPos;
                c.ControlType = dr["ControlType"].ToString();
                meta.Add(c);
            }

            ucDetailView1.MetaList = meta;

            return list;
        }