0

動的にバインドされたドロップダウンリストの特定のリストアイテムの背景色を変更する必要があります。ハイライトする必要のある特定のアイテムも動的であり、データセットに保存されます。このようにして、ユーザーはアイテムがプログラムの他の場所ですでに選択されていることを認識しますが、必要に応じてアイテムを選択することもできます。

以下は私のコードです:

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
    string strWeek = ((Label)e.Row.FindControl("lblWeek")).Text.ToString();
    string strBed = ((Label)e.Row.FindControl("lblBed")).Text.ToString();
    string strJob = getSelectedJob(strBed, strWeek);

    e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#f8f8ff");
    DataTable myTable = new DataTable();
    DataColumn EIDColumn = new DataColumn("EID");
    DataColumn EventNameColumn = new DataColumn("EventName");
    myTable.Columns.Add(EIDColumn);
    myTable.Columns.Add(EventNameColumn);
    DataSet ds = new DataSet();
    ds = getJobs(strBed, strWeek, ddlTerm.SelectedValue.ToString(), strJob);
    DataSet ds2 = new DataSet();
    ds2 = getAssignedJobs(strBed);

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList ddl = (DropDownList)e.Row.FindControl("ddlEssential");
        DataRow[] rows = ds.Tables[0].Select();
        foreach (DataRow row in rows)
        {
            DataRow newRow = myTable.NewRow();
            newRow["EID"] = row["EID"];
            newRow["EventName"] = row["EventName"];
            myTable.Rows.Add(newRow);
         }
             ddl.DataSource = myTable;
             ddl.DataTextField = "EventName";
             ddl.DataValueField = "EID";
             ddl.DataBind();
             ddl.Items.FindByValue(strJob).Selected = true;

             foreach (DataRow row in ds2.Tables[0].Select())
             {
                 string strAssignedJob = row["EID"].ToString();
                 ddl.Items.FindByValue(strAssignedJob).Attributes.Add("style", "background-color:#cccccc");
             }
     }

このエラーが発生しまし たオブジェクト参照がオブジェクトのインスタンスに設定されていません。ドロップダウンリストにスタイル属性を追加する行で発生しているようです。

これは可能ですか、それとも私のループステートメントは正しくありませんか?

本当にありがとう!

4

1 に答える 1

0

Tariqulazamに感謝します。あなたは私を正しい方向に向けました。

それ以来、コードの構造を変更しましたが、それによって私が望むものが正確に得られます。'FindByValue'の値を変数に割り当てることにより、それがnullであるかどうかをより適切にテストすることができました。

foreach (DataRow row in ds2.Tables[0].Select())
{
    string strAssignedJob = row["EID"].ToString();
    ListItem assignedItem = ddl.Items.FindByValue(strAssignedJob.ToString());

    if (assignedItem != null)
    {
        ddl.Items.FindByValue(strAssignedJob).Attributes.Add("style", "background-color:#cccccc");
    }
}
于 2012-11-01T23:16:02.947 に答える