Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在中继器中自定义数据源的输出?_Asp.net_Data Binding_Datatable_Datasource_Datarepeater - Fatal编程技术网

Asp.net 在中继器中自定义数据源的输出?

Asp.net 在中继器中自定义数据源的输出?,asp.net,data-binding,datatable,datasource,datarepeater,Asp.net,Data Binding,Datatable,Datasource,Datarepeater,我有一个连接到数据源(datatable对象)的数据中继器。在某些条件下,我需要更改前端某些列的输出。最有效的方法是什么 我目前正在尝试创建格式化输出,并将其分配给另一个datatable,并将其用作数据源,但它似乎过于复杂,并且很难维护 有没有更简单的方法来操作数据源的列值?我需要能够检查源的上一行和下一行,因为这是某些列值的基础。如果您谈论的是简单的操作,那么DataBinder.Eval方法接受一个格式字符串: <%#Eval("SomeMoneyColumn", "{0:C}")%

我有一个连接到数据源(datatable对象)的数据中继器。在某些条件下,我需要更改前端某些列的输出。最有效的方法是什么

我目前正在尝试创建格式化输出,并将其分配给另一个datatable,并将其用作数据源,但它似乎过于复杂,并且很难维护


有没有更简单的方法来操作数据源的列值?我需要能够检查源的上一行和下一行,因为这是某些列值的基础。

如果您谈论的是简单的操作,那么
DataBinder.Eval
方法接受一个格式字符串:

<%#Eval("SomeMoneyColumn", "{0:C}")%>
您也可以使用
ItemDataBound
事件。使用此技术,您仍然可以访问datasource对象,以防您的操作涉及绑定到中继器的其他数据

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Label lblCtrl = e.Item.FindControl("SomeControl") as Label;
    if (lblCtrl != null)
    {
        lblCtrl.Text = String.Format("My name is {0}", DataBinder.Eval(e.Item.DataItem, "SomeColumn"));
    }
}

我不认为有一种方法可以像您现在所做的那样,在客户端轻松地使用特殊的逻辑来做您想要做的事情。如果您从数据库中获取数据,则可以在数据库端执行所有数据操作,并将其透明地传递到前端。

您所说的是哪种操作?我们是在谈论格式化日期,还是更复杂的事情?基于上一行和下一行值更改列值(字符串)mm。。。听起来它可能是
ItemDataBound
事件的一个很好的候选者。那么我可以在ItemDataBound事件中获得整个数据源吗?
protected string FormatData(object data)
{
    return String.Format("My name is {0}", data);
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Label lblCtrl = e.Item.FindControl("SomeControl") as Label;
    if (lblCtrl != null)
    {
        lblCtrl.Text = String.Format("My name is {0}", DataBinder.Eval(e.Item.DataItem, "SomeColumn"));
    }
}