将asp:BoundField的值更改为页面加载

时间:2014-10-30 22:38:04

标签: c# asp.net

我有以下内容:

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

有办法做到这一点吗?

3 个答案:

答案 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;
    }
}