我有以下内容:
<Columns>
...
<asp:BoundField DataField="datetime_added" HeaderText="When Added" ReadOnly="True" SortExpression="datetime_added" />
...
</Columns>
DataField
datetime_added
来自SQL数据源。在从C#端的SQL数据源查询值之后,我想对此列的每个值进行一些编辑。有点像:
//short pseudo code example
protected void someEvent(object sender, EventArgs e)
{
sender.GetField["datetime_added"] = "test";
}
有办法做到这一点吗?
答案 0 :(得分:2)
使用templatefield而不是boundfield - 带有标签 - 标签文本由函数提供,如下所示:
<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text='<%= SomeFunction(Eval("db_id"),Eval("description")) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这在您的代码背后:
protected string SomeFunction(object id, object description)
{
//your code
return "";
}
调用函数时,SQL中的字段作为对象传递 这样你就可以根据自己的需要使用它,或者根据你想要的东西返回其他内容。
当从每行的数据源绑定值时调用该函数,您可能还需要传递一个id来标识该行。
答案 1 :(得分:0)
您是否尝试过“OnRowCreated”活动?我在这里假设您正在使用GridView,如果没有,那么在您将数据绑定到的任何组件中可能会有类似的内容。
对于GridView,这是一个例子:
protected void gridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// do what you need in here
// e.Row.Cells[x] where x = the column number
}
}
此外,此方法可能非常慢,具体取决于您正在处理的行数。
答案 2 :(得分:0)
如果您使用RowDataBound
事件在绑定到网格之前操作值(在将每一行绑定到gridview时调用)
protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string datetimeadded = DataBinder.Eval(e.Row.DataItem, "datetime_added").ToString();
// or you can use the cell index to reference the boundfield like below
string datetimeadded = e.Row.Cells[1].Text;
}
}