所以我试图根据同一行中的另一个单元格向我的DataGrid
单元格添加标题值。
我在ItemCreated
上触发了一个事件,该事件当前将单元格设置为HeaderText
使用e.Item.Cells[i].Attributes.Add("title", DataGrid.Columns[i].HeaderText)
但是现在我有一个新的要求,即某个列的标题需要基于不同的列值。
但是当我使用e.Item.Cells[otherColumnIndex].Text
时,它会返回一个空字符串
我必须使用不同的财产吗?如何获取Cell的当前值,因为我假设在触发此事件之前填充了数据。 。除非在ItemCreated
事件之后填写数据?
答案 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);
}
}
}