如何将GridView行传递给TemplateField函数?

时间:2012-04-04 04:50:39

标签: asp.net gridview templatefield

我有一个包含3列的GridView:FirstName,LastName和TemplateField FullName,其中我将FirstName和LastName串在一起。

假设调用DisplayFullName是我想用来连接FirstName和LastName的函数,如何将row参数传递给函数以及如何声明函数的参数?谢谢。

这是我的FullName列的代码:

        <asp:TemplateField HeaderText="FullName">
            <ItemTemplate>
                <%# DisplayFullName(???) %>
            </ItemTemplate>
        </asp:TemplateField>

这是我对该功能的声明:

protected string DisplayFullName(???)
  { ... }

???是我需要帮助的地方。或者我是否需要通过该行?如果每次调用DisplayFullName,则“当前”行是已知的。如果是这样,我如何访问DisplayFullName中的当前行?

为了清楚起见,我简化了操作。实际上,我需要的行中最多可以有20个值,我想在所调用的函数中进行一些计算。

3 个答案:

答案 0 :(得分:2)

我不知道为什么你在这里调用一个函数来显示全名。 您可以在代码中使用这样的方法来实现全名:

    <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                    <%#Eval("FirstName") %>&nbsp;<%#Eval("LastName") %>   
                </ItemTemplate>
            </asp:TemplateField>
</asp:TemplateField>

答案 1 :(得分:2)

@RJIGO:你可以使用这样的函数:

<asp:TemplateField HeaderText="Name">
     <ItemTemplate>
        <%# DisplayFullName(Eval("FirstName"), Eval("LastName"))%>         
        </ItemTemplate>
     </asp:TemplateField>

你的代码隐藏方法会喜欢这个

  protected string DisplayFullName(object FirstName, object LastName)
  {
      return Convert.ToString(FirstName)+Convert.ToString(LastName);
  }

答案 2 :(得分:2)

不得不发帖,因为似乎没有人给你一个完全符合你要求的答案 - 将行传递给后端函数。

只需将“Container.DataItem”传递给您的函数 - 这就是DataRow

<asp:TemplateField>
    <ItemTemplate> 
        <%# DisplayFullName(Container.DataItem) %>
    </ItemTemplate> 
</asp:TemplateField>

然后在CodeBehind中,您可以将其作为DataRowView进行操作:

public string DisplayFullName(object containerDataItem)
{
    string firstName = ((DataRowView)containerDataItem)["FirstName"].ToString();
    string lastName = ((DataRowView)containerDataItem)["LastName"].ToString();
    ...

希望这有帮助!