ItemTemplate调用Method

时间:2013-11-13 18:44:52

标签: c# asp.net gridview

我要做的是从ItemTemplate中调用一个方法。 我有以下内容:

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# FixtureType(DataBinder.Eval("FixtureType")) %>'></asp:Label>
</ItemTemplate>

我喜欢做的是传递FixtureType的值,然后在其后附加“A”。我收到以下消息:方法'Eval'没有重载需要1个参数

protected string FixtureType(int FixtureType)
{
  return Convert.ToString(FixtureType) + "A";
}

3 个答案:

答案 0 :(得分:1)

错误与您的方法无关,错误在于对DataBinder.Eval()的调用。 (调用堆栈永远不会到达您的方法,因为它无法首先评估您的方法的参数。)如错误所示,Eval() doesn't have an overload which accepts only one argument

也许你的意思是这个?:

FixtureType(DataBinder.Eval(Container.DataItem, "FixtureType"))

除此之外,你很有可能想要进行一些类型检查。 DataBinder.Eval()会返回object,您的方法需要int。您可能希望在将值传递给方法之前将其转换为int,或者将方法更改为接受object,然后在内部将其转换为int。 / p>

答案 1 :(得分:1)

尝试以下语法&amp;更新方法的签名以采用object而不是int

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%#FixtureType(DataBinder.Eval(Container.DataItem, "FixtureType")) %>'></asp:Label>
</ItemTemplate>

protected bool FixtureType(object FixtureType)
{
  return Convert.ToString(FixtureType) + "A";
}

答案 2 :(得分:0)

有几种方法可以做到这一点:

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# FixtureType(Convert.ToInt32(Eval("FixtureType"))) %>'></asp:Label>
</ItemTemplate>

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# Eval("FixtureType").ToString() + "A" %>'></asp:Label>
</ItemTemplate>

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# Eval("FixtureType", "{0}A") %>'></asp:Label>
</ItemTemplate>