在datagrid 中显示a.id,a.code,b.name,a.else   a与b分别是两个不同的表,
两个表的条件是a.id=b.id
我的要求是直接在datagrid的中操作(增加,修改,删除),但只对a表中的数据进行操作,如何实现。
还有一点我想问的是,在新闻网站,新闻是怎么排版与保存的。

解决方案 »

  1.   

    http://dotnet.aspx.cc/
    你的问题这里有很多答案。
      

  2.   

    internal class DataGridTextBindColumn:DataGridColumnStyle
    {
    private DataView ChoiceDataViewSource;
    private string ChoiceDisplayField;
    private string ChoiceValueField;
    public DataGridTextBindColumn(DataView ChoiceDataViewSource,string ChoiceDisplayField,string ChoiceValueField) : base() 
    {
    this.ChoiceDataViewSource =ChoiceDataViewSource;
    this.ChoiceDisplayField =ChoiceDisplayField;
    this.ChoiceValueField =ChoiceValueField;
    //myTextBox.DataBindings .Add (new System .Windows .Forms .Binding ("Text",ChoiceDataViewSource,BindField));
    }
    protected override void Abort(int rowNum)
    {
    Invalidate();
    } protected override bool Commit
    (CurrencyManager dataSource, int rowNum) 
    {
    Invalidate();
    return true;
    } protected override void Edit(
    CurrencyManager source, 
    int rowNum,
    Rectangle bounds, 
    bool readOnly,
    string instantText, 
    bool cellIsVisible) 
    { }
    protected int Find(System.Object value)
    {
    int int1;
    int int2;

    int2=ChoiceDataViewSource.Count ;
    if (int2<=0)
    {
    return -1;
    }
    for (int1=0;int1<int2;int1++)
    {
    if (ChoiceDataViewSource[int1][ChoiceValueField ].ToString ().Trim ()==value.ToString ().Trim ())
    {
    return int1;
    }
    }
    return -1;
    } protected override Size GetPreferredSize(
    Graphics g, 
    object value) 
    {
    return new Size(100,  4);
    } protected override int GetMinimumHeight() 
    {
    return  4;
    } protected override int GetPreferredHeight(Graphics g, 
    object value) 
    {
    return  4;
    } protected override void Paint(Graphics g, 
    Rectangle bounds, 
    CurrencyManager source, 
    int rowNum) 
    {
    Paint(g, bounds, source, rowNum, false);
    }
    protected override void Paint(
    Graphics g, 
    Rectangle bounds,
    CurrencyManager source, 
    int rowNum,
    bool alignToRight) 
    {
    Paint(
    g,bounds, 
    source, 
    rowNum, 
    Brushes.Red, 
    Brushes.Blue, 
    alignToRight);
    }
    protected override void Paint(
    Graphics g, 
    Rectangle bounds,
    CurrencyManager source, 
    int rowNum,
    Brush backBrush, 
    Brush foreBrush,
    bool alignToRight) 
    {
    object value=GetColumnValueAtRow(source, rowNum);
    int int1=Find (value);
    string display="";
    if (int1>=0)
    {
    display=this.ChoiceDataViewSource [int1][ChoiceDisplayField].ToString ();
    }
    //string display=GetColumnValueAtRow(source, rowNum).ToString ();//需要增加一段程序寻求对应项
    Rectangle rect = bounds;
    g.FillRectangle(backBrush,rect);
    rect.Offset(0, 2);
    rect.Height -= 2;
    g.DrawString(display, 
    this.DataGridTableStyle.DataGrid.Font, 
    foreBrush, rect);
    } protected override void SetDataGridInColumn(DataGrid value) 
    {
    }
    }
      

  3.   

    public class DataGrid_ComboBox:DataGrid
    {
    public DataGrid_ComboBox( ):base()
    {
    }
    public DataView DataGridDataView=null;
    //列性质
    public int ColumnNumber=0;//整个列数
    public string[] ColumnDisplayType=null;//每列类型:Text、Bool、ComboBox
    public int[] ColumnComboBoxCol=null;//为ComboBox类型时所指示的ComboBox列匹配项;
    public string[] ColumnMappingName=null;//每列匹配的字段名
    internal bool[] ColumnReadOnly=null;//每列的只读性
    internal string[] ColumnHeaderText=null;//每列标题
    internal int[] ColumnWidth=null;//每列宽度;
    public int ComboBoxNumber=0;
    public DataView[] ComboBoxDataView=null;
    public string[] ComboBoxDisplayMember=null;
    public string[] ComboBoxValueMember=null;
    public void Combination( )
    {
    int int1;
    //base.DataSource =DataGridDataView;
    base.SetDataBinding (DataGridDataView,"");
    System.Windows .Forms.DataGridTableStyle  t_显示表;
    t_显示表=new DataGridTableStyle (); System.Windows .Forms .DataGridColumnStyle[] t_显示列;
    t_显示列=new System .Windows .Forms .DataGridColumnStyle  [ColumnNumber]; for (int1=0;int1<ColumnNumber;int1++)
    {
    switch (ColumnDisplayType[int1])
    {
    case "Text":t_显示列[int1]=new DataGridTextBoxColumn ();
    break;
    case "Bool":t_显示列[int1]=new DataGridBoolColumn ();
    break;
    case "ComboBox":t_显示列[int1]=new DataGridComboBoxColumn (ComboBoxDataView[ColumnComboBoxCol[int1]],ComboBoxDisplayMember[ColumnComboBoxCol[int1]],ComboBoxValueMember[ColumnComboBoxCol[int1]]);
    break;
    case "TextBind":t_显示列[int1]=new DataGridTextBindColumn (ComboBoxDataView[ColumnComboBoxCol[int1]],ComboBoxDisplayMember[ColumnComboBoxCol[int1]],ComboBoxValueMember[ColumnComboBoxCol[int1]]);
    break;
    case "ComboBoxTableView":t_显示列[int1]=new DataGridComboBoxTableViewColumn (ComboBoxDataView[ColumnComboBoxCol[int1]],ComboBoxDisplayMember[ColumnComboBoxCol[int1]],ComboBoxValueMember[ColumnComboBoxCol[int1]]);
    break;
    case "TreeView":t_显示列[int1]=new DataGridTreeViewColumn (ComboBoxDataView[ColumnComboBoxCol[int1]],ComboBoxDisplayMember[ColumnComboBoxCol[int1]],ComboBoxValueMember[ColumnComboBoxCol[int1]]);
    break;
    default:t_显示列[int1]=new DataGridTextBoxColumn ();
    break;
    }
    t_显示表.GridColumnStyles .Add (t_显示列[int1]);
    }
    base.TableStyles .Add (t_显示表);
    base.TableStyles [0].MappingName =DataGridDataView.Table .TableName ;
    for (int1=0;int1<ColumnNumber;int1++)
    {
    t_显示列[int1].MappingName =ColumnMappingName[int1];
    t_显示列[int1].HeaderText =ColumnHeaderText [int1];
    t_显示列[int1].ReadOnly =ColumnReadOnly [int1];
    t_显示列[int1].Width =ColumnWidth[int1];
    }
    }
    }
      

  4.   

    DataGridTextBindColumn注释有误,代码不需要改动,只需将b表的视,b.id和b.name字段名传递进去