【问题标题】:how to put checkboxes in datagrid in windows mobile 6 using c#?如何使用 c# 在 windows mobile 6 的 datagrid 中放置复选框?
【发布时间】:2011-06-22 10:26:41
【问题描述】:

如何使用 c# 在 windows mobile 6 的 datagrid 中放置复选框?

数据集 dsAgent=表; 数据表 dataTable = dsAgent.Tables[0];

            DataGridTableStyle tableStyle = new DataGridTableStyle();

            tableStyle.MappingName = dataTable.TableName;

            GridColumnStylesCollection columnStyles = tableStyle.GridColumnStyles;

            DataGridTextBoxColumn columnStyle = new DataGridTextBoxColumn();
            columnStyle.MappingName = "FirstName";
            columnStyle.HeaderText = "Name";
            columnStyle.Width = 80;
            columnStyles.Add(columnStyle);

            //columnStyle = new DataGridTextBoxColumn();
            //columnStyle.MappingName = "EmailAddress";
            //columnStyle.HeaderText = "EmailID";
            //columnStyle.Width = 150;
            //columnStyles.Add(columnStyle);

            columnStyle = new DataGridTextBoxColumn();
            columnStyle.MappingName = "WorkPhone";
            columnStyle.HeaderText = "PhoneNo";
            columnStyle.Width = 150;
            columnStyles.Add(columnStyle);


            GridTableStylesCollection tableStyles = DataGrid.TableStyles;
            tableStyles.Add(tableStyle);


            DataGrid.PreferredRowHeight = 16;
            DataGrid.RowHeadersVisible = false;
            DataGrid.DataSource = dataTable;

【问题讨论】:

    标签: windows-mobile c#-3.0


    【解决方案1】:

    这是 Eric Hartwell 的旧博客中的一些代码(使用 the wayback machine 提取到 SO):

        private void SetupTableStyles()
        {
           Color alternatingColor = SystemColors.ControlDark;
           DataTable vehicle = dataSource.Tables[1];
    
           // ID Column 
           DataGridCustomTextBoxColumn dataGridCustomColumn0 = new DataGridCustomTextBoxColumn();
           dataGridCustomColumn0.Owner = this.dataGrid1;
           dataGridCustomColumn0.Format = "0##";
           dataGridCustomColumn0.FormatInfo = null;
           dataGridCustomColumn0.HeaderText = vehicle.Columns[0].ColumnName;
           dataGridCustomColumn0.MappingName = vehicle.Columns[0].ColumnName;
           dataGridCustomColumn0.Width = dataGrid1.Width * 10 / 100;    // 10% of grid size
           dataGridCustomColumn0.AlternatingBackColor = alternatingColor;
           dataGridCustomColumn0.ReadOnly = true;
           dataGridTableStyle1.GridColumnStyles.Add(dataGridCustomColumn0);
    
           // Make column
           DataGridCustomTextBoxColumn dataGridCustomColumn1 = new DataGridCustomTextBoxColumn();
           dataGridCustomColumn1.Owner = this.dataGrid1;
           dataGridCustomColumn1.HeaderText = vehicle.Columns[1].ColumnName;
           dataGridCustomColumn1.MappingName = vehicle.Columns[1].ColumnName;
           dataGridCustomColumn1.NullText = "-Probably Ford-";
           dataGridCustomColumn1.Width = dataGrid1.Width * 40 / 100;     // 40% of grid size
           dataGridCustomColumn1.Alignment = HorizontalAlignment.Right;
           dataGridCustomColumn1.AlternatingBackColor = alternatingColor;
           dataGridTableStyle1.GridColumnStyles.Add(dataGridCustomColumn1);
    
           // Mileage column
           DataGridCustomUpDownColumn dataGridCustomColumn2 = new DataGridCustomUpDownColumn();
           dataGridCustomColumn2.Owner = this.dataGrid1;
           dataGridCustomColumn2.HeaderText = vehicle.Columns[2].ColumnName;
           dataGridCustomColumn2.MappingName = vehicle.Columns[2].ColumnName;
           dataGridCustomColumn2.NullText = "-Unknown-";
           dataGridCustomColumn2.Width = dataGrid1.Width * 20 / 100;     // 20% of grid size
           dataGridCustomColumn2.Alignment = HorizontalAlignment.Left;
           dataGridCustomColumn2.AlternatingBackColor = alternatingColor;
           dataGridTableStyle1.GridColumnStyles.Add(dataGridCustomColumn2);
    
           // Availability column 
           DataGridCustomCheckBoxColumn dataGridCustomColumn3 = new DataGridCustomCheckBoxColumn();
           dataGridCustomColumn3.Owner = this.dataGrid1;
           dataGridCustomColumn3.HeaderText = vehicle.Columns[3].ColumnName;
           dataGridCustomColumn3.MappingName = vehicle.Columns[3].ColumnName;
           dataGridCustomColumn3.NullText = "-Unknown-";
           dataGridCustomColumn3.Width = dataGrid1.Width * 10 / 100;     // 10% of grid size
           dataGridCustomColumn3.Alignment = HorizontalAlignment.Left;
           dataGridCustomColumn3.AlternatingBackColor = alternatingColor;
           dataGridTableStyle1.GridColumnStyles.Add(dataGridCustomColumn3);
    
           // Fuel Level column
           DataGridCustomComboBoxColumn dataGridCustomColumn4 = new DataGridCustomComboBoxColumn();
           dataGridCustomColumn4.Owner = this.dataGrid1;
           dataGridCustomColumn4.HeaderText = vehicle.Columns[4].ColumnName;
           dataGridCustomColumn4.MappingName = vehicle.Columns[4].ColumnName;
           dataGridCustomColumn4.NullText = "-Unknown-";
           dataGridCustomColumn4.Width = dataGrid1.Width * 30 / 100;     // 30% of grid size
           dataGridCustomColumn4.Alignment = HorizontalAlignment.Left;
           dataGridCustomColumn4.AlternatingBackColor = alternatingColor;
           dataGridTableStyle1.GridColumnStyles.Add(dataGridCustomColumn4);
    
           // Last Used column
           DataGridCustomDateTimePickerColumn dataGridCustomColumn5 = new DataGridCustomDateTimePickerColumn();
           dataGridCustomColumn5.Owner = this.dataGrid1;
           dataGridCustomColumn5.HeaderText = vehicle.Columns[5].ColumnName;
           dataGridCustomColumn5.MappingName = vehicle.Columns[5].ColumnName;
           dataGridCustomColumn5.NullText = "-Unknown-";
           dataGridCustomColumn5.Width = dataGrid1.Width * 30 / 100;     // 30% of grid size
           dataGridCustomColumn5.Alignment = HorizontalAlignment.Left;
           dataGridCustomColumn5.AlternatingBackColor = alternatingColor;
           dataGridTableStyle1.GridColumnStyles.Add(dataGridCustomColumn5);
    
           // Grid, mapping
           dataGridTableStyle1.MappingName = vehicle.TableName;                       // Setup table mapping name
           dataGrid1.DataSource = vehicle;                                  
    
           // Setup grid's data source
           ComboBox cb = (ComboBox)dataGridCustomColumn4.HostedControl;
           DataTable fuel = dataSource.Tables[0];                                                    // Set up data source
           cb.DataSource = fuel;                                            
    
           // For combo box column
           cb.DisplayMember = fuel.Columns[0].ColumnName;
           cb.ValueMember = fuel.Columns[0].ColumnName;
    
           dataGrid1.CurrentRowIndex = 50;                                                            // Move to the middle of the table
        }
    

    【讨论】:

    • 这有什么难的?它准确地显示了你所追求的。如果有一些令人困惑或不清楚的部分,请告诉我们,我们可以尝试帮助澄清。发布您尝试过的代码(您上面的代码根本与复选框无关),也许我们可以帮助指导您。
    【解决方案2】:

    为了更好的复选框 UI 外观和感觉,而不是大十字

    private void DrawCheckBox(Graphics g, Rectangle bounds, CheckState state)
            {
                int size;
                int boxTop;
    
                size = bounds.Size.Height < bounds.Size.Width ? bounds.Size.Height : bounds.Size.Width;
                size = size > ((int)g.DpiX / 7) ? ((int)g.DpiX / 7) : size;
    
                boxTop = bounds.Y + (bounds.Height - size) / 2;
                size = 12; // 13, so I made it 12
                boxTop = boxTop - 1;
                using (Pen p = new Pen(this.Owner.ForeColor))
                {
                    g.DrawRectangle(p, bounds.X, boxTop, size, size);
                }
    
                if (state != CheckState.Unchecked)
                {
                    using (Pen p = new Pen(state == CheckState.Indeterminate ? SystemColors.GrayText : SystemColors.ControlText))
                    {
                        p.Width = 2;
                        int offset = 2;
                        int edgeOffset = 2;
                        g.DrawLine(p, bounds.X + offset, boxTop + offset + 2, bounds.X + (size / 2) - edgeOffset, boxTop + (size / 2) + edgeOffset);
                        g.DrawLine(p, bounds.X + (size / 2) - edgeOffset, boxTop + (size / 2) + edgeOffset, bounds.X + size - offset, boxTop + offset);
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 2011-07-10
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多