示例:
我可以访问ID
属性,因为有一个属性。
但我无法从同一个类访问方法。所以<%# Eval("GetToday") as string %>
不起作用。
创建属性而不是没有setter的方法将解决问题,但是存在更好的方法吗?
标记:
<asp:GridView ID="GridView1" runat="server" SelectMethod="GetMyClass">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<%# Eval("ID") as string %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Today">
<ItemTemplate>
<%# Eval("**GetToday**") as string %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
代码背后:
public IList<MyClass> GetMyClass() { return new List<MyClass>(); }
MyClass的:
public class MyClass {
public int ID { get; set; }
public DateTime Date { get; set; }
public string GetToday()
{
// other userfulls logic
return Date.ToString("dd.MM.yyyy");
}
// workaround
public string GetTime
{
get
{
return Date.ToString("HH:mm");
}
set
{
// nothing
}
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
您最好使用现有的DateTime Date
属性并应用一些文本格式:
<asp:GridView ID="GridView1" runat="server" SelectMethod="GetMyClass">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<%# Eval("ID") as string %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Today">
<ItemTemplate>
<%# Eval("Date", "{0:dd.MM.yyyy}") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
如果必须具有自定义逻辑,则可以在属性中执行此操作,而不是使用方法,例如:
public class MyClass {
public int ID { get; set; }
private DateTime _date;
public DateTime Date
{
get
{
//do something with the date field here
// you could add a number of days for example
_date = _date.AddDays(4);
return _date;
};
set
{
_date = value;
};
}
public MyClass()
{
_date = DateTime.Now();
}
}
只需确保私有_date
字段已正确初始化,可能在MyClass
的构造函数中,我已将其初始化为示例中的当前日期。
答案 2 :(得分:0)
您可以调用方法,只需要使语法正确:
<%= GetToday() %>
答案 3 :(得分:0)
如果它是一个简单的方法,你可以使用 get 访问器创建一个属性。
正如philreed指出的那样,如果您只是格式化DateTime,那么您可以在现有的属性上使用 Eval :
<%# Eval("Date", "{0:dd.MM.yyyy}") %>
但是如果方法做的更复杂,那么我会避免在属性中放入复杂的逻辑。相反,你可以在页面后面的代码中调用一个方法,然后调用你的类的方法:
<asp:TemplateField HeaderText="Today">
<ItemTemplate>
<%# GetToday(Container.DataItem) %>
</ItemTemplate>
</asp:TemplateField>
然后在后面的代码中:
protected string GetToday(object obj)
{
MyClass mc = obj as MyClass;
if(mc != null) return mc.GetToday();
else return "Some default text.";
}
不是最优雅的解决方案,但如果没有其他选择,可以使用。