0

4 つのカスタム クラスのいずれかの配列を返す Web サービスを呼び出しています。すべてのクラスの内部コンテンツは同じです。Description という名前の文字列と、Value という名前の別の文字列です。4 つのクラスのいずれかを受け入れ、その内容をドロップダウン リストのデータソースに入れることができる単一のメソッドを作成しようとしています。

未知の複合クラスから同じ内容の指定クラスに変換する方法はありますか? それとも中身を剥がしますか?

それとも、データ型が異なる 4 つの同一の関数を作成する必要がありますか?

編集:コードを追加

    myDropDown.DataSource = CreateDataSource(myWebServiceResponse.Items);
    myDropDown.DataTextField = "DescriptionField";
    myDropDown.DataValueField = "ValueField";

    // Bind the data to the control.
    myDropDown.DataBind();

...

    public ICollection CreateDataSource(MasterData[] colData)
    {
        // Create a table to store data for the DropDownList control.
        DataTable dt = new DataTable();

        // Define the columns of the table.
        dt.Columns.Add(new DataColumn("DescriptionField", typeof(String)));
        dt.Columns.Add(new DataColumn("ValueField", typeof(String)));

        // Populate the table
        foreach (sapMasterData objItem in colData)
        {
            dt.Rows.Add(CreateRow(objItem, dt));
        }

        // Create a DataView from the DataTable to act as the data source 
        // for the DropDownList control.
        DataView dv = new DataView(dt);
        return dv;
    }

    DataRow CreateRow(MasterData objDataItem, DataTable dt)
    {
        // Create a DataRow using the DataTable defined in the  
        // CreateDataSource method.
        DataRow dr = dt.NewRow();

        dr[0] = objDataItem.Description;
        dr[1] = objDataItem.Value;

        return dr;
    }

public class MasterData
{
    public string Value;
    public string Description;
}
4

3 に答える 3

3

実際には、DropDownListコントロールにはas DataSource が必要であり、 andIEnumerableを指定できます。DataTextFieldDataValueField

dropDownList.DataSource = some_Array_You_Retrieved_From_Your_Web_Service;
dropDownList.DataValueField = "Value";
dropDownList.DataTextField = "Description";
dropDownList.DataBind();

ご覧のとおり、配列の実際の型は、それをバインドするプロパティを持っValueている限り、実際には問題になりません。Description

于 2013-04-23T06:18:24.587 に答える
0

4 つのクラスすべて (IDescriptionValue など) によって実装されるインターフェイスを定義し、その型のパラメーターを受け入れるメソッドを記述できます。たとえば、次のようになります。

public interface IDescriptionValue
{
public string Description {get;set;}
public string Value {get;set;}
}

public class CustomClass1 : IDescriptionValue{
public string Description {get;set;}
public string Value {get;set;}
}
//snip...
public class CustomClass4 : IDescriptionValue{
public string Description {get;set;}
public string Value {get;set;}
}
//accepts parameters of type IDescriptionValue
public void setDropdownData(IDescriptionValue inputData){
// your code here
}
于 2013-04-23T06:22:55.537 に答える