C# 扩展自定义Datatable以提供其他方法
我想让它变得简单一点,将C# 扩展自定义Datatable以提供其他方法,c#,C#,我想让它变得简单一点,将DataRow集合的值分配给一些对象的属性 我想这样做: Tabelle t = new Tabelle(query, Id, 1200); foreach (DataRow r in t.Rows) { CustObject b = new CustObject(); r.AssingValue(Columnname, b, PropertyName); } internal class Tabelle : DataTable { Data
DataRow
集合的值分配给一些对象的属性
我想这样做:
Tabelle t = new Tabelle(query, Id, 1200);
foreach (DataRow r in t.Rows)
{
CustObject b = new CustObject();
r.AssingValue(Columnname, b, PropertyName);
}
internal class Tabelle : DataTable
{
DataTable tabelle = new DataTable();
internal Tabelle(string abfrage)
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter((SqlCommand)new Prozedur(abfrage));
if (adapter.SelectCommand.Connection != null && adapter.SelectCommand.Connection.State == ConnectionState.Open)
{
adapter.Fill(this);
}
}
}
// How can I attach this method to the datarow Collection?
public void AssingValue(string parametername, object target, string propertyName)
{
if (Row.Value != System.DBNull.Value) // how would I access the DataRow Value?
{
var prop = target.GetType().GetProperty(propertyName);
prop.SetValue(target, Convert.ToDateTime(Row.Value));
}
}
}
public void AssingValue(string columnName, object target, string propertyName, int rowIndex)
{
DataRow row = this.Rows[rowIndex];
if (row[columnName] != System.DBNull.Value) // how would I access the DataRow Value?
{
var prop = target.GetType().GetProperty(propertyName);
prop.SetValue(target, Convert.ToDateTime(row[columnName]));
}
}
该表如下所示:
Tabelle t = new Tabelle(query, Id, 1200);
foreach (DataRow r in t.Rows)
{
CustObject b = new CustObject();
r.AssingValue(Columnname, b, PropertyName);
}
internal class Tabelle : DataTable
{
DataTable tabelle = new DataTable();
internal Tabelle(string abfrage)
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter((SqlCommand)new Prozedur(abfrage));
if (adapter.SelectCommand.Connection != null && adapter.SelectCommand.Connection.State == ConnectionState.Open)
{
adapter.Fill(this);
}
}
}
// How can I attach this method to the datarow Collection?
public void AssingValue(string parametername, object target, string propertyName)
{
if (Row.Value != System.DBNull.Value) // how would I access the DataRow Value?
{
var prop = target.GetType().GetProperty(propertyName);
prop.SetValue(target, Convert.ToDateTime(Row.Value));
}
}
}
public void AssingValue(string columnName, object target, string propertyName, int rowIndex)
{
DataRow row = this.Rows[rowIndex];
if (row[columnName] != System.DBNull.Value) // how would I access the DataRow Value?
{
var prop = target.GetType().GetProperty(propertyName);
prop.SetValue(target, Convert.ToDateTime(row[columnName]));
}
}
Assign方法应具有输入参数,如
rowIndex
以查找表中的特定行,以及columnName
以获取/设置行的列值
您可以尝试以下方法:
Tabelle t = new Tabelle(query, Id, 1200);
foreach (DataRow r in t.Rows)
{
CustObject b = new CustObject();
r.AssingValue(Columnname, b, PropertyName);
}
internal class Tabelle : DataTable
{
DataTable tabelle = new DataTable();
internal Tabelle(string abfrage)
{
try
{
SqlDataAdapter adapter = new SqlDataAdapter((SqlCommand)new Prozedur(abfrage));
if (adapter.SelectCommand.Connection != null && adapter.SelectCommand.Connection.State == ConnectionState.Open)
{
adapter.Fill(this);
}
}
}
// How can I attach this method to the datarow Collection?
public void AssingValue(string parametername, object target, string propertyName)
{
if (Row.Value != System.DBNull.Value) // how would I access the DataRow Value?
{
var prop = target.GetType().GetProperty(propertyName);
prop.SetValue(target, Convert.ToDateTime(Row.Value));
}
}
}
public void AssingValue(string columnName, object target, string propertyName, int rowIndex)
{
DataRow row = this.Rows[rowIndex];
if (row[columnName] != System.DBNull.Value) // how would I access the DataRow Value?
{
var prop = target.GetType().GetProperty(propertyName);
prop.SetValue(target, Convert.ToDateTime(row[columnName]));
}
}
如果我理解正确,您可以通过datarow类本身的扩展方法来实现这一点
public static class DataRowExtensionMethods
{
public static int ReturnIntForField(this DataRow data, string fieldName)
{
return data[fieldName] == DBNull.Value ? 0 : Convert.ToInt32(data[fieldName]);
}
public static DateTime ReturnDateTimeFromDataRowField(this DataRow data, string fieldName)
{
return Convert.ToDateTime(data[fieldName]);
}
} \\etc... etc...
然后,我们可以按照以下步骤重新编写datarow循环
foreach (DataRow r in t.Rows)
{
CustObject b = new CustObject();
b.PropertyName = r.ReturnIntForField("ColumnName");
b.PropertyName1 = r.ReturnDateTimeFromDataRowField("ColumnName1");
}
希望这能有所帮助谢谢,这很有效。将索引传递回
数据表
,这似乎有点奇怪,因为我分析了同一对象的行集合。我为您提供了另一种解决方案。。如果我理解正确的话!谢谢,这就是我要找的