空抛出异常的DropDownList的选定值内GridView控件按钮点击 [英] Null Exception thrown in dropdownlist selected value inside gridview on button click

查看:103
本文介绍了空抛出异常的DropDownList的选定值内GridView控件按钮点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

DROPDOWNLIST是绑定到gridview的dynamically.And它总是在GridView中的第一行。
当我试图让DropDownList的价值及其给空值:

 这里是code为DropDownList绑定到GridView控件:保护无效dgData_RowDataBound(对象发件人,GridViewRowEventArgs E)
{    ArrayList的strHead = NULL;
    如果(e.Row.RowType == DataControlRowType.Header)
    {
        strHead =新的ArrayList();
        的foreach(在e.Row.Cells DataControlFieldCell细胞)
        {
            strHead.Add(cell.Text);
        }
        的ViewState [HeaderCell] = strHead;
    }
    如果(e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList的DDL;
        如果(e.Row.RowIndex == 0)
        {
            对于(的Int32我= 0; I< e.Row.Cells.Count;我++)
            {
                DDL =新的DropDownList();
                ddl.ID =ddlCol+ i.ToString();
                e.Row.Cells [I] .Controls.Add(DDL);
                ddl.Items.Insert(0,新的列表项(的String.Empty,的String.Empty));
                ddl.Items.Insert(1,新的ListItem(名,1));
                ddl.Items.Insert(2,新的ListItem(姓,2));
                ddl.Items.Insert(3,新的ListItem(公司名称,3));
                ddl.Items.Insert(4,新的ListItem(帐号,4));
                ddl.Items.Insert(5,新的ListItem(户口号码2,5));
                ddl.Items.Insert(6,新的ListItem(户口号码3,6));
                ddl.Items.Insert(7,新的ListItem(组,7));
                ddl.Items.Insert(8,新的ListItem(商务电话,8));
                ddl.Items.Insert(9,新的ListItem(家庭电话,9));
                ddl.Items.Insert(10,新的ListItem(移动设备,10));
                ddl.Items.Insert(11,新的ListItem(电子邮件,11));
                ddl.Items.Insert(12,新的ListItem(其他电话号码,12));
                ddl.Items.Insert(13,新的ListItem(网页,13));
                ddl.Items.Insert(14,新的ListItem(IM地址,14));
                ddl.Items.Insert(15,新的列表项(注释,15));
                ddl.Items.Insert(16,新的ListItem(街道地址1,16));
                ddl.Items.Insert(17岁,新的ListItem(地址2,17));
                ddl.Items.Insert(18,新的ListItem(街城市/郊区,18));
                ddl.Items.Insert(19,新的ListItem(街头国,19));
                ddl.Items.Insert(20,新的ListItem(街头张贴code,20));
                ddl.Items.Insert(21,新的ListItem(街头之国,21));
                ddl.Items.Insert(22,新的ListItem(邮寄地址1,22));
                ddl.Items.Insert(23岁,新的ListItem(邮寄地址2,23));
                ddl.Items.Insert(24,新的ListItem(邮寄城市/郊区,24));
                ddl.Items.Insert(25岁,新的ListItem(邮件状态,25));
                ddl.Items.Insert(26岁,新的ListItem(邮寄邮政code,26));
                ddl.Items.Insert(27岁,新的ListItem(邮寄国家,27));
                ddl.Items.Insert(28岁,新的列表项(注释,28));
                ddl.Items.Insert(29岁,新的ListItem(自定义字段,29));
                ddl.Items.Insert(30岁,新的ListItem(关系经理,30));
                ddl.Items.Insert(31,新的ListItem(主要兴趣,31));
                ddl.Items.Insert(32,新的ListItem(客户经理,32));
                strHead =(ArrayList中)的ViewState [HeaderCell];
                的foreach(在ddl.Items列表项的项目)
        {
             如果(strHead [I]的ToString()== item.Text)
             {
            ddl.SelectedValue = item.Value;
             }
            其他
             {
         // ddl.SelectedIndex = 0;
            }
                }            }         }    }  }

code绑定GridView的:

 私人无效grdbind()
{
    DataTable的DB =新的DataTable();
    DB =(数据表)会议[csvdata];
    DataRow的NEWROW = db.NewRow();
    db.Rows.InsertAt(NEWROW,0);    colcount = db.Columns.Count;    dgData.DataSource = DB;
    dgData.DataBind();
  }

下面是code到按钮单击我的问题越来越取的DropDownList值:

 保护无效的button1_Click(对象发件人,EventArgs的发送)
{
     GridViewRow排;
    排= dgData.Rows [0];
   DropDownList的DDL =(DropDownList的)(row.Cells [1] .FindControl(ddlCol1));}


解决方案

如果你有一个标题行,这将永远是指数在0,所以你不能测试它不是标题行和具有索引0,因为这两个检查将返回false。

更改指数在这两个支票,用于将DDL和code拿来。

添加code:

 如果(e.Row.RowType == DataControlRowType.DataRow)
{
    DropDownList的DDL;    如果(e.Row.RowIndex == 1)
    {
        // .....
    }
}

抓取code:

  GridViewRow行= dgData.Rows [1];
DropDownList的DDL =(DropDownList的)row.Cells [1] .FindControl(ddlCol1);

Dropdownlist is binds to gridview dynamically.And it will always in first row of gridview. When i try to get dropdownlist value its giving null value:

Here is code to bind dropdownlist to gridview:

protected void dgData_RowDataBound(object sender, GridViewRowEventArgs e)
{

    ArrayList strHead = null;
    if (e.Row.RowType == DataControlRowType.Header)
    {
        strHead = new ArrayList();
        foreach (DataControlFieldCell cell in e.Row.Cells)
        {
            strHead.Add(cell.Text);
        }
        ViewState["HeaderCell"] = strHead;
    }
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList ddl;


        if (e.Row.RowIndex == 0)
        {
            for (Int32 i = 0; i < e.Row.Cells.Count; i++)
            {
                ddl = new DropDownList();
                ddl.ID = "ddlCol" + i.ToString();
                e.Row.Cells[i].Controls.Add(ddl);
                ddl.Items.Insert(0, new ListItem(string.Empty, string.Empty));
                ddl.Items.Insert(1, new ListItem("First Name", "1"));
                ddl.Items.Insert(2, new ListItem("Last Name", "2"));
                ddl.Items.Insert(3, new ListItem("Company Name", "3"));
                ddl.Items.Insert(4, new ListItem("Account No", "4"));
                ddl.Items.Insert(5, new ListItem("Account No 2", "5"));
                ddl.Items.Insert(6, new ListItem("Account No 3", "6"));
                ddl.Items.Insert(7, new ListItem("Groups", "7"));
                ddl.Items.Insert(8, new ListItem("Business Phone", "8"));
                ddl.Items.Insert(9, new ListItem("Home Phone", "9"));
                ddl.Items.Insert(10, new ListItem("Mobile", "10"));
                ddl.Items.Insert(11, new ListItem("Email", "11"));
                ddl.Items.Insert(12, new ListItem("Other Phone Number", "12"));
                ddl.Items.Insert(13, new ListItem("Web Page", "13"));
                ddl.Items.Insert(14, new ListItem("IM Address", "14"));
                ddl.Items.Insert(15, new ListItem("Comment", "15"));
                ddl.Items.Insert(16, new ListItem("Street Address 1", "16"));
                ddl.Items.Insert(17, new ListItem("Street Address 2", "17"));
                ddl.Items.Insert(18, new ListItem("Street City / Suburb", "18"));
                ddl.Items.Insert(19, new ListItem("Street State", "19"));
                ddl.Items.Insert(20, new ListItem("Street Post Code", "20"));
                ddl.Items.Insert(21, new ListItem("Street Country", "21"));
                ddl.Items.Insert(22, new ListItem("Mailing Address 1", "22"));
                ddl.Items.Insert(23, new ListItem("Mailing Address 2", "23"));
                ddl.Items.Insert(24, new ListItem("Mailing City / Suburb", "24"));
                ddl.Items.Insert(25, new ListItem("Mailing State", "25"));
                ddl.Items.Insert(26, new ListItem("Mailing Post Code", "26"));
                ddl.Items.Insert(27, new ListItem("Mailing Country", "27"));
                ddl.Items.Insert(28, new ListItem("Notes", "28"));
                ddl.Items.Insert(29, new ListItem("Custom Fields", "29"));
                ddl.Items.Insert(30, new ListItem("Relationship Manager", "30"));
                ddl.Items.Insert(31, new ListItem("Primary Interest", "31"));
                ddl.Items.Insert(32, new ListItem("Account Manager", "32"));
                strHead = (ArrayList)ViewState["HeaderCell"];




                foreach(ListItem item in ddl.Items)
        {
             if (strHead[i].ToString() == item.Text)
             {
            ddl.SelectedValue = item.Value;
             }
            else
             {
         // ddl.SelectedIndex = 0;
            }


                }

            }



         }

    }

  }

code to bind gridview:

 private void grdbind()
{


    DataTable db = new DataTable();
    db = (DataTable)Session["csvdata"];
    DataRow newrow = db.NewRow();
    db.Rows.InsertAt(newrow, 0);

    colcount = db.Columns.Count;

    dgData.DataSource = db;
    dgData.DataBind();


  }

Here is the code to fetch dropdownlist value on button click where i am getting problem:

   protected void Button1_Click(object sender, EventArgs e)
{
     GridViewRow row;
    row = dgData.Rows[0];
   DropDownList ddl= (DropDownList)(row.Cells[1].FindControl("ddlCol1"));

}

解决方案

If you have a header row, it will always be at the index 0, so you can't test for it not being the header row and having an index of 0, as both checks will return false.

Change your index in both your check for adding the DDL, and the code to fetch it.

Adding code:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    DropDownList ddl;

    if (e.Row.RowIndex == 1)
    {
        // ..... 
    }
}

Fetching code:

GridViewRow row = dgData.Rows[1];
DropDownList ddl = (DropDownList)row.Cells[1].FindControl("ddlCol1");

这篇关于空抛出异常的DropDownList的选定值内GridView控件按钮点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆