1.在单元格中添加linklabel就和添加文字一样,帮它当作文字一样处理就可了
2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!

解决方案 »

  1.   

    1.在单元格中添加linklabel就和添加文字一样,帮它当作文字一样处理就可了
    2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!有道理
      

  2.   

    LinkLabel类型的DataColumnStyle完全可以,需要从DataColumnStyle重载,并引发Click事件,然后在程序中处理该时间。
    建议参考文档:http://www.microsoft.com/china/community/Column/Henry.mspx
      

  3.   

    1.在单元格中添加linklabel就和添加文字一样,帮它当作文字一样处理就可了
    2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!
    -------------------------------------------------------------------------
    1.我已经添加成功了,但是需要点一下它所在的单元格才能显示出来,我希望可以直接看到
    2.怎么在它的click事件里取得那个id
      

  4.   

    LinkLabel类型的DataColumnStyle完全可以,需要从DataColumnStyle重载,并引发Click事件,然后在程序中处理该时间。
    -------------------------------------
    这个我知道,我想知道的是怎么在它的click事件里取道关于它所在行的信息。
      

  5.   

    private void DGUser_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex < 0)
    return;
    CheckBox ChkBoxSign = new CheckBox();
    ChkBoxSign = (CheckBox)e.Item.Cells[4].FindControl("sign");
    if(e.Item.Cells[6].Text == "1")
    {
    ChkBoxSign.Checked=true;
    }
    else
    {
    ChkBoxSign.Checked=false;
    }
    ChkBoxSign.Enabled=false;

    }
      

  6.   

    是在webform中的吧
    那么你不需要单独添加一个linkelabel
    只要在datagrid控件中单吉右键,选择属性生成器->列->选择按扭列->添加
    添加好之后在下面右个按扭类型,选择linkbutton即可                                              wish u good luck
                                                         Greatsft
      

  7.   

    不好意思没说清楚,是在winform里面,不然也不需要这么麻烦了
      

  8.   

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Data;
    using System.Windows.Forms;namespace LongWin.UI.WinForm.Controls.ControlBase
    {
    /// <summary>
    /// DataGridComboBoxColumn 的摘要说明:继承自DataGridColumnStyle,派生的类中,必须重写:Abort、Commit、Edit 和 Paint(两次)
    /// 有关注释选自帮助
    /// 参考帮助文档:承载DateTimePicker 控件示例
    /// 位置:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWindowsFormsDataGridColumnStyleClassTopic.htm 
    /// </summary>
    public class DataGridComboBoxColumn:DataGridColumnStyle
    {
    private ComboBox pComboBox=new ComboBox();
    private bool isEditing;
    private string valueMember="";
    private string displayMember="";
    DataTable _tableSource ; /// <summary>
    /// 构造方法
    /// </summary>
    /// <param name="dt"></param>
    public DataGridComboBoxColumn():base()
    {
    pComboBox.Visible=false;
    } /// <summary>
    /// 加载数据,参数:数据表
    /// </summary>
    /// <param name="dt"></param>
    public void BindData(object dataSource)
    {
    BindData(dataSource,displayMember,valueMember);
    } /// <summary>
    /// 加载数据,参数:数据表、显示字段名
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="sDisplayMember"></param>
    public void BindData(object dataSource,string sDisplayMember)
    {
    BindData(dataSource,sDisplayMember,sDisplayMember);
    } string defaultFilter=string.Empty;
    /// <summary>
    /// 加载数据,参数:数据表、显示字段名、值字段名
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="sDisplayMember"></param>
    /// <param name="sValueMember"></param>
    public void BindData(object dataSource,string sDisplayMember,string sValueMember)
    {
    try
    {
    if(dataSource is DataTable)
    {
    _tableSource=dataSource as DataTable;
    }
    else if(dataSource is DataSet)
    {
    DataSet ds=dataSource as DataSet;
    _tableSource=ds.Tables[0];
    }
    else if(dataSource is DataView)
    {
    DataView dv=dataSource as DataView;
    defaultFilter=dv.RowFilter; //记录默认筛选条件 _tableSource=dv.Table;
    } if(sDisplayMember.Trim()=="")
    {
    throw new Exception("existingDipplay 参数不能为空!");
    }
    else
    {
    if(sValueMember.Trim()=="")
    sValueMember=sDisplayMember;

    this.pComboBox.DropDownStyle=ComboBoxStyle.DropDownList;
    this.pComboBox.DataSource = dataSource ;
    this.pComboBox.DisplayMember = this.DisplayMember ;
    this.pComboBox.ValueMember = this.ValueMember ;

    }
    }
    catch(Exception ex)
    {
    throw ex;
    }
    } //值对应的数据字段名
    public string ValueMember
    {
    get{ return valueMember;}
    set{valueMember=value;}
    } //显示对应的数据字段名
    public string DisplayMember
    {
    get{return displayMember;}
    set{displayMember=value;}
    } /// <summary>
    /// 在派生类中被重写时,将启动一个请求来中断编辑过程
    /// </summary>
    /// <param name="rowNum"></param>
    protected  override void Abort(int rowNum)
    {
    isEditing = false;
    pComboBox.GotFocus-= new EventHandler(pComboBox_GotFocus);
    Invalidate();
    }
      

  9.   

    public event EventHandlerComboBoxColummDataChanging DataChanging;
    /// <summary>
    /// 在派生类中被重写时,将启动一个请求来完成编辑过程
    /// </summary>
    /// <param name="dataSource"></param>
    /// <param name="rowNum"></param>
    /// <returns></returns>
    protected override bool Commit(CurrencyManager dataSource, int rowNum)
    {
    pComboBox.Bounds = Rectangle.Empty;
             
    if (!isEditing)
    return true; isEditing = false; try 
    {
    try
    {
    if(this.DataChanging!=null)
    {
    this.DataChanging(this.pComboBox.SelectedValue);
    }
    }
    catch(Exception er)
    {
    MessageBox.Show(er.Message);
    return false;
    }
    SetColumnValueAtRow(dataSource, rowNum, this.pComboBox.SelectedValue );

    catch (Exception) 
    {
    Abort(rowNum);
    return false;
    } Invalidate();
    return true;
    } /// <summary>
    /// 准备单元格以便编辑值
    /// </summary>
    /// <param name="source"></param>
    /// <param name="rowNum"></param>
    /// <param name="bounds"></param>
    /// <param name="readOnly"></param>
    /// <param name="instantText"></param>
    /// <param name="cellIsVisible"></param>
    protected override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
    {
    object sValue; if(GetColumnValueAtRow(source, rowNum) is System.DBNull)
    {
    sValue="";
    }
    else
    {
    sValue =  GetColumnValueAtRow(source, rowNum) ;
    } if (cellIsVisible && !this.ReadOnly) 
    {
    pComboBox.Bounds = new Rectangle(bounds.X + 1, bounds.Y + 1, bounds.Width - 2, bounds.Height - 2);
    pComboBox.SelectedValue = sValue ;
    pComboBox.Visible = true;
    pComboBox.GotFocus+=new EventHandler(pComboBox_GotFocus);

    else 
    {
    pComboBox.Visible = false;
    } if (pComboBox.Visible)
    DataGridTableStyle.DataGrid.Invalidate(bounds);
    } /// <summary>
    /// 获取指定值的宽度和高度
    /// </summary>
    /// <param name="g"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    protected override Size GetPreferredSize(Graphics g, object value) 
    {
    return new Size(100, pComboBox.PreferredHeight + 2);
    } /// <summary>
    /// 将获取一行的最小高度
    /// </summary>
    /// <returns></returns>
    protected override int GetMinimumHeight() 
    {
    return pComboBox.PreferredHeight + 2;
    } /// <summary>
    /// 获取自动调整列的大小所用的高度
    /// </summary>
    /// <param name="g"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    protected override int GetPreferredHeight(Graphics g, object value) 
    {
    return pComboBox.PreferredHeight + 2;
    } /// <summary>
    /// 绘制列
    /// </summary>
    /// <param name="g"></param>
    /// <param name="bounds"></param>
    /// <param name="source"></param>
    /// <param name="rowNum"></param>
    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 selectedValue =GetColumnValueAtRow(source, rowNum) ;

    if(selectedValue is System.DBNull)
    {
    selectedValue = "";
    }
    else
    {
    if(selectedValue is System.Boolean )
    selectedValue = Convert.ToInt32(selectedValue).ToString(); string filter=string.Format("{0}='{1}'" , this.ValueMember , selectedValue);
    if(this._tableSource.Columns[this.valueMember].DataType==typeof(int)
    || this._tableSource.Columns[this.valueMember].DataType==typeof(short))
    {
    if(selectedValue.ToString().Length==0)
    selectedValue=0;
    filter=string.Format("{0}={1}" , this.ValueMember , selectedValue);
    } filter+= ((this.defaultFilter.Length>0) ? " And " + this.defaultFilter : ""); DataRow[] dr = _tableSource.Select(filter);
    if(dr != null && dr.Length ==1)
    selectedValue = dr[0][this.DisplayMember].ToString() ;
    else 
    selectedValue=string.Empty;
    } int rows=Convert.ToInt32(bounds.Height/this.FontHeight);
    if(rows==0)
    {
    rows=1;
    }
    int dec=Convert.ToInt32((bounds.Height-this.FontHeight*rows)/2); if(dec<0)
    {
    dec=0;
    } Rectangle rect = new Rectangle(bounds.X,bounds.Y+dec,bounds.Width,bounds.Height-dec*2); g.FillRectangle(backBrush,bounds);
    rect.Offset(0, 2);
    rect.Height -= 2;
    g.DrawString(selectedValue.ToString() ,this.DataGridTableStyle.DataGrid.Font, foreBrush,rect);
    } /// <summary>
    /// 设置列的 System.Windows.Forms.DataGrid
    /// </summary>
    /// <param name="value"></param>
    protected override void SetDataGridInColumn(DataGrid value) 
    {
    base.SetDataGridInColumn(value);
    if (pComboBox.Parent != null) 
    {
    pComboBox.Parent.Controls.Remove 
    (pComboBox);
    }
    if (value != null) 
    {
    value.Controls.Add(pComboBox);
    }

    } private void pComboBox_GotFocus(object sender, EventArgs e)
    {
    this.isEditing = true;
    base.ColumnStartedEditing(pComboBox);
    }
    }
    public delegate void EventHandlerComboBoxColummDataChanging(object newValue);
    }