'System.Data.DataRowView' в DropDownList - PullRequest
       19

'System.Data.DataRowView' в DropDownList

0 голосов
/ 07 февраля 2012

Я не могу связать данные с Dropdown List .. Может кто-нибудь объяснить мне, почему?Ошибка: 'System.Data.DataRowView' does not contain a property with the name '_DeptID'. мой код:

public class ClassDataManagement
{
    public DataTable BindDropDownList(string Sql, DropDownList DropDownList)
    {
        SqlConnection cn = new SqlConnection(@"Data Source=ABID-PC;Initial Catalog=_uniManagement;Integrated Security=True");
        SqlCommand cmd = new SqlCommand(Sql, cn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        if (dt.Rows.Count == 0)
        {

        }
        else
        {
            DropDownList.DataTextField = "Name";
            DropDownList.DataValueField = "_DeptID";
            DropDownList.DataSource = dt.DefaultView;
            DropDownList.DataBind();
        }
        return dt;
    }

}
protected void Page_Load(object sender, EventArgs e)
{
    ClassDataManagement dm = new ClassDataManagement();
    dm.BindDropDownList("select _Program.Name from _program,_Department where _program._Deptid = _department._DeptId", DropDownListProgram);
}

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012

Вы не возвращаете столбец с именем _Deptid в своем выражении SQL.

Ваш оператор SQL должен читать:

select _program.Name, _program._Deptid 
  from _program,_Department 
 where _program._Deptid = _Department._DeptId

Как отметил пользователь Stackoverflow, с помощью оператора using это автоматически избавится от ваших объектов. Другое дело, что вы делаете:

if (dt.Rows.Count == 0)

но у вас нет кода внутри. Независимо от того, делаете вы это в своем коде или нет, но если вы намереваетесь оставить его пустым, было бы целесообразно сделать следующее:

if (dt.Rows.Count > 0)
{
    DropDownList.DataTextField = "Name";    
    DropDownList.DataValueField = "_DeptID";    
    DropDownList.DataSource = dt.DefaultView;    
    DropDownList.DataBind();
}
3 голосов
/ 07 февраля 2012

Попробуйте изменить код к этому, вам не хватает _DeptID

   protected void Page_Load(object sender, EventArgs e)
    {
        ClassDataManagement dm = new ClassDataManagement();
        dm.BindDropDownList("select _Program.Name,_DeptID from _program,_Department where _program._Deptid = _department._DeptId", DropDownListProgram);

    }
3 голосов
/ 07 февраля 2012

Измените ваш SQL на:

select _Program.Name, _Program._DeptId from _program,_Department where _program._Deptid = _department._DeptId
3 голосов
/ 07 февраля 2012
  1. В вашем операторе выбора отсутствует столбец _Dept
  2. Утилизация объектов отсутствует. Таким образом, вы можете выполнить это двумя способами

    (a) Утилизация вручную

    (b) Использование заявления


public class ClassDataManagement
{
    public DataTable BindDropDownList(string Sql, DropDownList DropDownList)
    {
        using (SqlConnection cn = new SqlConnection(@"Data Source=ABID-PC;Initial Catalog=_uniManagement;Integrated Security=True"))
        {
            using (SqlCommand cmd = new SqlCommand(Sql, cn))
            {
                using(SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    using (DataTable dt = new DataTable())
                    {
                        da.Fill(dt);
                        DropDownList.DataTextField = "Name";
                        DropDownList.DataValueField = "_Deptid";
                        DropDownList.DataSource = dt.DefaultView;
                        DropDownList.DataBind();
                        return dt;
                    }
                }
            }
        }
    }

}
protected void Page_Load(object sender, EventArgs e)
{
    ClassDataManagement dm = new ClassDataManagement();
    dm.BindDropDownList("select _Program.Name, _program._Deptid from _program,_Department "
        + "where _program._Deptid = _department._DeptId", DropDownListProgram);

}

РЕДАКТИРОВАТЬ - 1

Добавление оператора использования для SqlDataAdapter , а также

...