gpt4 book ai didi

c# - 在 ASP.NET 中实现数据绑定(bind)的正确方法

转载 作者:行者123 更新时间:2023-11-30 14:05:05 25 4
gpt4 key购买 nike

为内部有中继器的控件实现 DataBind() 方法的正确方法是什么?

这些是此控件的要求(但如果您认为这些缺少某些内容或开销,您可以提供您的要求)

  • 控件应接受集合或可枚举(对象列表、匿名对象、字典或数据表)
  • DataSource 应该完全与控件解耦(使用 Data*Field 属性指定映射的属性或键;如 DropDownList 中的 DataValueField 和 DataTextField)
  • 控件在 ViewState 上应该很容易。如果可能,根本不应该使用 ViewState,或者它的使用率应该尽可能低(存储一些 ID 或类似的东西)
  • 控件应处理任何类型(使用 ToString() 转换它)
  • 在 ItemDataBound 内部能够使用 e.DataItem 如果可能应该可以访问

我希望我的控件像这样初始化:

var control = new Control();
control.DataDateField = "Date";
control.DataNameField = "FullName";
control.DataTextField = "Comment";
control.DataSource = data;
control.DataBind();

而数据项可以是以下之一

字典列表(或表格行)

var data = new List<Dictionary<string, string>>
{
new Dictionary<string, string>
{{"Date", "2009-03-15"}, {"FullName", "John Walker"}, {"Comment", "comment1"}},
new Dictionary<string, string>
{{"Date", "2009-03-12"}, {"FullName", "Chuck Norris"}, {"Comment", "comment2"}},
new Dictionary<string, string>
{{"Date", "2009-03-13"}, {"FullName", "Sergej Andrejev"}, {"Comment", "comment3"}}
};

匿名对象列表

var data = new List<object>
{
new {Date = "2009-03-15", FullName = "John Walker", Comment = "comment1"},
new {Date = "2009-03-12", FullName = "Chuck Norris", Comment = "comment2"},
new {Date = "2009-03-13", FullName = "Sergej Andrejev", Comment = "comment3"},
};

项目列表

public class SampleClass
{
public object Date { get; set; }
public object FullName { get; set; }
public object Comment { get; set; }

public SampleClass(string date, string fullName, string comment)
{
Date = date;
FullName = fullName;
Comment = comment;
}
};

var data = new List<SampleClass>
{
new SampleClass("2009-03-15", "John Walker", "comment1"),
new SampleClass("2009-03-12", "Chuck Norris", "comment2"),
new SampleClass("2009-03-13", "Sergej Andrejev", "comment3"),
};

数据表

var data = new DataTable();
data.Columns.Add(new DataColumn { DataType = typeof(DateTime), ColumnName = "Date" });
data.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "FullName" });
data.Columns.Add(new DataColumn { DataType = typeof(string), ColumnName = "Comment" });

data.Rows.Add(new object[] { DateTime.Parse("2009-03-15"), "John Walker", "comment1" });
data.Rows.Add(new object[] { DateTime.Parse("2009-03-12"), "Chuck Norris", "comment2" });
data.Rows.Add(new object[] { DateTime.Parse("2009-03-13"), "Sergej Andrejev", "comment3" });

基本上我想要的是用于数据绑定(bind)的通用代码,这样我就不会在每次创建新控件时都浪费时间从头开始创建它。如果您能引用任何良好做法、官方指南,当然还有您的个人经验,我将不胜感激。

最佳答案

本文使用模板构建了一个示例数据绑定(bind)控件:

Building DataBound Templated Custom ASP.NET Server Controls

关于c# - 在 ASP.NET 中实现数据绑定(bind)的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com