DataGrid获取Cell Contents

时间:2013-06-07 21:25:49

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

使用ItemDataBound evet代替ItemCreated事件。

ItemCreated:创建了行,并且还创建了itemtemplate控件。

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);
        }
    } 
}