public class MyItem
{
public string Name { get; set; }
public int UserId { get; set; }
}
public void MethodThatLoadsMyData
{
var originalListData = MethodThatFetchesMyData(45);
myDropDownList.DataSource = MethodThatBumpsTwoItemDatasources(myOuterList, originalListData);
myDropDownList.DataBind();
}
public void MethodThatBumpsTwoItemDatasources(List<MyItem> outerList, List<MyItem> dropdownList)
{
/*This modifies the original result set from the database that you were going
to use to populate your dropdown list. It compares the outer list (whatever that is)
with the result set, and adds items called "Not Available" when there is an item in the
outer list that doesn't exist in the dropdownlist */
var result = new List<Item>();
foreach (var item in listA)
{
var matched = false;
foreach (var itemB in listB.Where(itemB => itemB.Id == item.Id))
{
matched = true;
result.Add(item);
}
if (!matched)
{
result.Add(new Item
{
Name = "Not Available",
Id = 0
});
}
matched = false;
}
return result;
}
public List<MyItem> MethodThatFetchesMyData(int myParameter)
{
//gets my data from the database and builds dto objects
var sql = "my_stored_procedure_or_sql";
var list = new List<MyItems>();
using(var conn = new SqlConnection(myConnectionString))
{
using(var comm = new SqlCommand(sql, conn))
{
//do your normal client setup here (sql type, parameters, etc//
var parameters = SqlParameter[1];
parameters[0] = new SqlParameter("@ParameterName", DbType.Int);
parameters[0].Value = myParameter;
comm.Parameters = parameters;
comm.CommandType = CommandType.StoredProcedure;
conn.Open();
using(var rdr = comm.ExecuteReader())
{
while(rdr.Read())
{
list.Add(
new MyItem{
Name = rdr["NameColumn"].ToString(),
UserId = rdr["ID"]
});
}
return list;
}
}
}
}
データバインドされたコントロールでは、通常のアイテムテンプレートで新しい値を取得できます
<%#Eval("Name") %> <%#Eval("UserId") %>
ここで実際に行っているのは、データソースコントロールで構築されたデータテーブルではなく、実際のオブジェクトのリストにコントロールをバインドすることです。そうすることで、コントロールにバインドする前に、これらのリストで必要なことをすべて実行できます。この場合、2つのリストをまとめて、一方のリストには存在しないがもう一方のリストには存在するアイテムのアイテムを追加します。これがまさにあなたが必要としていたものであるかどうかはわかりませんが、これはあなたにいくつかのアイデアを与えるのに十分なはずです。