1

リピーター (チェックボックス、ドロップダウンリスト、テキストボックス) によって生成されたコントロールからのユーザー選択をデータテーブルに渡し、それをテスト用のグリッドビューへのデータ ソースとして使用し、最終的にはテーブル変数パラメーターとしてストアド プロシージャに使用しようとしています。

一部のチェックボックスが選択されていない場合、対応するテキストボックスは生成されず、コードは例外をスローします ( check to determine if the object is empty before calling the method)。

問題を引き起こしていると思われる部分は、テックスボックスからデータテーブルにテキストを渡すときです。チェックボックス名を渡すと正常に動作します。テキストボックスコントロールが生成されているかどうかを確認することでこれを克服しようとしていますが、それでも同じ例外がスローされます。

動的テキストボックスが生成されているかどうかを確認するより良い方法はありますか?

protected void Button2_Click(object sender, EventArgs e)
{
    DataTable Frs = new DataTable("udtMParameters");
    Frs.Columns.Add("MName", typeof(string));
    Frs.Columns.Add("IsNum", typeof(string));
    Frs.Columns.Add("MValue1", typeof(string));
    Frs.Columns.Add("MValue2", typeof(string));
    try
    {

        foreach (RepeaterItem i in Repeater1.Items)
        {
            CheckBox fn = i.FindControl("chk") as CheckBox;
            CheckBox isn = i.FindControl("ChkboxIsNumeric") as CheckBox;
            PlaceHolder plc = i.FindControl("PlcMFilter") as PlaceHolder;
            TextBox s = i.FindControl("start") as TextBox;
            TextBox l = i.FindControl("end") as TextBox;
            DropDownList d = i.FindControl("value") as DropDownList;


            if (fn.Checked)
            {
                TextBox1.Text = fn.Text;
                if (isn.Checked)
                {
                    DataRow dr = Frs.NewRow();
                    dr["MName"] = fn.Text;
                    dr["IsNum"] = "Y";
                    if (String.IsNullOrEmpty(s.Text))
                    {
                        dr["MValue1"] = s.Text;
                    }
                    else
                    {
                        dr["MValue1"] = " ";
                    }
                    if (String.IsNullOrEmpty(s.Text))
                    {
                        dr["MValue2"] = l.Text;
                    }
                    else
                    {
                        dr["MValue2"] = " ";
                    }

                   Frs.Rows.Add(dr); 
                }

                else
                {
                    DataRow dr = Frs.NewRow();
                    dr["MName"] = fn.Text;
                    dr["IsNum"] = "N";
                    dr["MValue1"] = "MValue1";
                    dr["MValue2"] = "MValue2";
                    Frs.Rows.Add(dr);

                }
            }

            this.GridView1.Visible = true;
            GridView1.DataSource = Frs;
            GridView1.DataBind();


            panel2.Enabled = true;
            panel2.Visible = true;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }

}
4

1 に答える 1

0

nullオブジェクトをローカライズするために、実現されたキャストを括弧で置き換えます

TextBox s = (TextBox)i.FindControl("start");
TextBox l = (TextBox)i.FindControl("end");

変換が失敗した場合、括弧でキャストすると例外が発生し、as でキャストすると null が返されます。

于 2013-03-27T13:32:59.113 に答える