在html中
<asp:TemplateField HeaderText="UserName" SortExpression="UserName">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UserName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("UserName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
那么如何获取其中Bind的数据了
TemplateField tf = this.GridView1.Columns[0] as TemplateField;
IBindableTemplate bt = tf.ItemTemplate as IBindableTemplate;
GridViewRow r = this.GridView1.Rows[e.RowIndex];
System.Collections.Specialized.IOrderedDictionary dict
= bt.ExtractValues(r);
string name = dict["Name"] as string;
如果访问的数据在模板里面可以使用这种方式,如果不在模板里面我们可以采用如下方式
private IOrderedDictionary ExtractValuesFromRow(GridView gv, int rowIndex)
{
OrderedDictionary dict = new OrderedDictionary();
GridViewRow r = gv.Rows[rowIndex];
for (int i = 0; i < gv.Columns.Count; i++)
{
DataControlField column = gv.Columns[i];
OrderedDictionary d = new OrderedDictionary();
column.ExtractValuesFromCell(d, r.Cells[i] as DataControlFieldCell, r.RowState, true);
foreach (DictionaryEntry entry in d)
{
dict.Add(entry.Key, entry.Value);
}
}
return dict;
}
使用
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
IOrderedDictionary dict = ExtractValuesFromRow(this.GridView1, e.RowIndex);
string id = dict["UserName"] as string;
}