从DataGridColumnStyle继承,自己写,系统只提供了TextBoxStyle。
asp.net的就方便了,用个template就可以了。
刚学到的,还没研究。不过client一般不用这种专业的grid给客户操作。

解决方案 »

  1.   

    肯定是行的,从DataGridColumnStyle继承当然可以。
    我正在尝试中......
      

  2.   

    我已有了DataGridComboBoxColumn的源程序,是VB.net写的
    我正在消化中,等我彻底弄清楚了,我会将之改写成C#, 有哪位需要的留个mail, 适当给些分就行了。
      

  3.   

    awen800() 给我发一份吧,分没问题![email protected]
      

  4.   

    to damekuler(damekuler);
    我还在整理改写中,明天应该可以完成初稿,到时我mail给你。
      

  5.   

    我也想要。
    谢谢
    [email protected]
      

  6.   

    不知道gridcolumstyle下的format管不管用,对了awen800给我也看看好么
    [email protected]
      

  7.   

    www.csharphelp.com里的确有相关的文章<playing with datagrid>而且经过修改已经能运行了。
      

  8.   

    //include all the required namespaces
     
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Text;
    using System.Xml;
    namespace Test
    {
    public class TestDataGrid : System.Windows.Forms
    {
      /// <summary>
      /// Required designer variable.
      /// </summary>
    private System.Windows.Forms.ComboBox cmbFunctionArea;
    private DataTable   dtblFunctionalArea;
    private DataGrid   dgdFunctionArea;
       
       /// <summary>
    /// public constructor
    /// </summary>
       public TestDataGrid()
       {
       //automatically generated by the VS Designer
    //creates the object of the above designer variables 
    InitializeComponent();
    PopulateGrid();
       }

      private void PopulateGrid()
          {
    //Declare and initialize local variables used
    DataColumn dtCol = null;//Data Column variable
    string[]   arrstrFunctionalArea = null;//string array variable
    System.Windows.Forms.ComboBox cmbFunctionArea; //combo box var
    DataTable dtblFunctionalArea;//Data Table var

    //Create the combo box object and set its properties
    cmbFunctionArea = new ComboBox();
    cmbFunctionArea.Cursor = System.Windows.Forms.Cursors.Arrow;
    cmbFunctionArea.DropDownStyle=System.Windows.Forms.ComboBoxStyle.DropDownList;
    cmbFunctionArea.Dock = DockStyle.Fill;
    //Event that will be fired when selected index in the combo box is changed
    cmbFunctionArea.SelectionChangeCommitted += new   EventHandlercmbFunctionArea_SelectedIndexChanged);

    //Create the String array object, initialize the array with the column 
    //names to be displayed
    arrstrFunctionalArea = new string [3];
    arrstrFunctionalArea[0] = "Functional Area";
    arrstrFunctionalArea[1] = "Min";
    arrstrFunctionalArea[2] = "Max";

    //Create the Data Table object which will then be used to hold 
    //columns and rows
    dtblFunctionalArea = new DataTable ("FunctionArea");

    //Add the string array of columns to the DataColumn object 
    for(int i=0; i< 3;i++)
    {
    string str = arrstrFunctionalArea[i];
    dtCol = new DataColumn(str);
    dtCol.DataType = System.Type.GetType("System.String");
    dtCol.DefaultValue   = "";
    dtblFunctionalArea.Columns.Add(dtCol);
    }

    //Add a Column with checkbox at last in the Grid
    DataColumn dtcCheck    = new DataColumn("IsMandatory");//create the data          //column object with the name  
    dtcCheck.DataType      = System.Type.GetType("System.Boolean");//Set its //data Type
    dtcCheck.DefaultValue  = false;//Set the default value
    dtblFunctionalArea.Columns.Add(dtcCheck);//Add the above column to the //Data Table //Set the Data Grid Source as the Data Table createed above
    dgdFunctionArea.DataSource = dtblFunctionalArea;

    //set style property when first time the grid loads, next time onwards it //will maintain its property
    if(!dgdFunctionArea.TableStyles.Contains("FunctionArea"))
    {
    //Create a DataGridTableStyle object
    DataGridTableStyle dgdtblStyle = new DataGridTableStyle();
    //Set its properties
    dgdtblStyle.MappingName = dtblFunctionalArea.TableName;//its table name of dataset
    dgdFunctionArea.TableStyles.Add(dgdtblStyle);
    dgdtblStyle.RowHeadersVisible = false;
    dgdtblStyle.HeaderBackColor = Color.LightSteelBlue;
    dgdtblStyle.AllowSorting = false;
    dgdtblStyle.HeaderBackColor = Color.FromArgb(8,36,107);
    dgdtblStyle.RowHeadersVisible = false;
    dgdtblStyle.HeaderForeColor = Color.White;
    dgdtblStyle.HeaderFont = new System.Drawing.Font("Microsoft Sans  Serif", 9F,  System.Drawing.FontStyle.Bold,  System.Drawing.GraphicsUnit.Point,  ((System.Byte)(0)));
    dgdtblStyle.GridLineColor = Color.DarkGray;
    dgdtblStyle.PreferredRowHeight = 22;
    dgdFunctionArea.BackgroundColor = Color.White; //Take the columns in a GridColumnStylesCollection object and set //the size of the 
    //individual columns
    GridColumnStylesCollection colStyle;
    colStyle = dgdFunctionArea.TableStyles[0].GridColumnStyles;
    colStyle[0].Width        = 100;
    colStyle[1].Width = 50;
    colStyle[2].Width = 50;
    colStyle[3].Width = 80;
    } //To add the combo box dynamically to the data grid, you have to take the // Text Box that is present (by default) in the column where u want to add //this combo box (here it is first column i.e. Functional Area).From the //tablestyles of the data grid take the grid column styles of the column //where you want to add the combo box respectively.
    DataGridTextBoxColumn dgtb =     (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[0];
    //Add the combo box to the text box taken in the above step
    dgtb.TextBox.Controls.Add (cmbFunctionArea);

       //Note: After these add the code to fill the details in the grid by //establishing 
      // connection to the server and writing necessary steps:
    }
      }//end of the class
    }//end of the namespace
      

  9.   

    我总共在csharphelp上发现了5个不同版本的类似代码。
    有好有不好,我在整理中......
      

  10.   

    那个源程序是错的
    第一个错误
    类声明应该为:
    public  class  TestDataGrid  :  System.Windows.Forms.Form
    第二个错误
    掉了一个(
    :)