【问题标题】:DataGrid get Cell ContentsDataGrid 获取单元格内容
【发布时间】:2026-02-21 18:50:02
【问题描述】:

所以我试图根据同一行中的另一个单元格向我的DataGrid 单元格添加标题值。

我在ItemCreated 上触发了一个事件,该事件当前将单元格设置为HeaderText

使用e.Item.Cells[i].Attributes.Add("title", DataGrid.Columns[i].HeaderText)

但现在我有一个新要求,即某个列的标题需要基于不同的列值。

但是当我使用e.Item.Cells[otherColumnIndex].Text 时,它会返回一个空字符串

我必须使用不同的属性吗?如何获取单元格的当前值,因为我假设在触发此事件之前填充了数据。 .除非在ItemCreated事件之后填写数据?

【问题讨论】:

    标签: c# asp.net .net data-binding datagrid


    【解决方案1】:

    使用 ItemDataBound 事件代替 ItemCreated 事件。

    ItemCreated:行已创建,项目模板控件也已创建。

    ItemDataBound:数据现在已经绑定到控件了。

    示例:标记

    <asp:DataGrid id="grdTeset" OnItemDataBound="grdTeset_ItemDataBound" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundColumn DataField="Column1" />
            <asp:BoundColumn DataField="Column2" />
        </Columns>
    </asp:DataGrid>
    

    后面的示例代码:

    public class Data 
    {
        public string Column1 {get;set;}
        public string Column2 {get;set;}
    }
    public partial class _Default : System.Web.UI.Page
    {
        public List<Data> data = new List<Data>();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                data.Add(new Data() { Column1 = "Row 1 Col 1", Column2 = "Row 1 Col 2" });
                data.Add(new Data() { Column1 = "Row 2 Col 1", Column2 = "Row 2 Col 2" });
                data.Add(new Data() { Column1 = "Row 3 Col 1", Column2 = "Row 3 Col 2" });
    
                grdTeset.DataSource = data;
                grdTeset.DataBind();
            }
        }
    
        protected void grdTeset_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemIndex != -1) //MAKE SURE THIS IS A DATA ROW AND NOT HEADER OR FOOTER
            {
                string value = e.Item.Cells[0].Text;
                Response.Write(value);
            }
        } 
    }
    

    【讨论】: