【问题标题】:asp:GridView -> asp:TemplateField Calling Public Method Not Available Inside Controlasp:GridView -> asp:TemplateField 调用公共方法在控件内部不可用
【发布时间】:2019-09-17 02:50:49
【问题描述】:

我一直在将 aspx 页面迁移到新的 ASP.NET WebApplication。我在Gridview 内部使用了很多公共方法的调用。但是我的页内引用看不到方法背后的代码。

我正在使用框架 4.7.2。我明白了

错误:CS0103 名称“GetReturnedString”不存在于 当前上下文

我的所有其他服务器控件都可以访问,但这些公共定义的方法除外。谷歌运气不好 :(

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataSourceID="SqlDataSource1">
    <Columns>                                
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Literal ID="ltlString" runat="server" 
                    Text='<%# GetReturnedString(Eval("FieldExample1").ToString())%>'>
                </asp:Literal>
            </ItemTemplate>               
        </asp:TemplateField>
    </Columns>
</asp:GridView>

我的示例代码如下所示:

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    public string GetReturnedString(string fieldval1)
    {
        var outValue = "Something";
        return outValue;
    }
}

【问题讨论】:

  • 是否要将 GetReturnedString 添加到所有 FieldExample1 行?我猜你的 Gridview 不止一行。
  • 正确,我的 .cs 后面的代码中的公共方法如上例所示正常工作,并且会为每一行运行。现在我得到 The name 'GetReturnedString' does not exist in the current context 即使我在尝试构建网站时在 aspx 页面的代码隐藏中将其设为公共方法。

标签: c# asp.net gridview


【解决方案1】:

我会从页面后面的代码中对 GridView 进行数据绑定,并在数据绑定之前将内容添加到数据表列中。 那么aspx页面就会有:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
        <Columns>                                
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Literal ID="ltlString" runat="server" 
                                 Text='<%# (Eval("FieldExample1").ToString()) %>'>
                    </asp:Literal>
                </ItemTemplate>               
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

文件背后的代码:

    DataTable dtB = new DataTable();
    dtB = //get the datatable from your data source

    if (dtB != null && dtB.Rows.Count > 0)
        {
            foreach (DataRow drB in dtB.Rows)
            {
                drB["FieldExample1"] = GetReturnedString() + drB["FieldExample1"];
            }
        }
        GridView1.DataSource = dtB;
        GridView1.DataBind();

   public string GetReturnedString()
   {
      var outValue = "Something ";
      return outValue;
   }

看看。您可以进行格式化等。 至少它适用于我的测试页面,我希望它也适用于你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2020-01-15
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2010-10-17
    • 2017-03-25
    相关资源
    最近更新 更多