none
Передача параметра через DropDownList RRS feed

  • Вопрос

  • Здравствуйте.

    Использую вот этот код:

     

     

    MembershipUser currentUser = Membership.GetUser();
    
        Guid currentUserId = (Guid)currentUser.ProviderUserKey;
    
    
    
        //Connect to the database, retrieve data, and then fill the data in the DataSet.
    
        string myConnection = ConfigurationManager.ConnectionStrings["AzDASConnectionString"].ConnectionString;
    
        SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from azdas_dealers where UserId =@UserId order by name", myConnection);
    
        myDataAdapter.SelectCommand.Parameters.AddWithValue("@UserId", SqlDbType.NVarChar).Value = currentUserId;
    
        DataSet myDataSet = new DataSet();
    
        myDataAdapter.Fill(myDataSet);
    
        DropDownList1.DataSource = myDataSet;
    
        DropDownList1.DataBind();

     

    Но почему то отправляется только первая строка в DropDownList-е.

    Попробовал по разному но все равно такая же проблема, что поделать?



    Crazy_Progi
    10 января 2011 г. 13:23

Ответы

Все ответы

  • Не совсем понял на счет "отправляется только первая строка", но ты уверен, что

    "select * from azdas_dealers where UserId =@UserId order by name"

    Возвращает больше одной строки?

    12 января 2011 г. 5:40
    Модератор
  • Да там более 10 строк возвращает и это происходить когда Page_Load идет так что я вижу что 10 строк возвратило. Но почему то выбирает только первую строку. Почему не могу понять 
    Crazy_Progi
    12 января 2011 г. 13:13
  • Думаю проблема в том, что вы указываете неверный тип SqlDbType.NVarChar

    myDataAdapter.SelectCommand.Parameters.AddWithValue("@UserId", SqlDbType.NVarChar).Value = currentUserId;

    Может надо использовать SqlDbType.Int ? Какого типа у вас UserId?

    Во вторых: условие у вас такое UserId =@UserId.. вы уверены что записей UserId равных вашему условию больше одного?
    Попробуйте проверить количество записей после Fill так:

          DataRowCollection colect = myDataSet.Tables[" azdas_dealers"].Rows;
    		int cnt = colect.Count;

     

    12 января 2011 г. 16:45
  • myDataAdapter.SelectCommand.Parameters.AddWithValue("@UserId", SqlDbType.NVarChar).Value = currentUserId;												Поменял на uniqueidentifier но все равно выбераеться только первое значение в DropDownList
    Не понимаю как так может быть :(

    Crazy_Progi
    14 января 2011 г. 6:47
  • Вы проверили значение Count после выполнения запроса?

    И еще вы задаете параметр с помощью метода AddWithValue , который в качестве 2го параметра принимает значение, а не тип параметра.

    Попробуйте задать параметр с помощью метода Add .


    Для связи [mail]
    14 января 2011 г. 8:52
    Модератор
  • Задал через Add, все равно  записывается 1й Итем а не выбранный
    Crazy_Progi
    20 января 2011 г. 12:04
  • Что значит записывается 1ый инем, а не выбраный? Вы что делаете?

    У вас есть стандартная база Northwind? Попробуйте выполнить следующее:

          SqlConnection conn = new SqlConnection(/* подключение к БД*/);
          
          SqlDataAdapter sql = new SqlDataAdapter("SELECT * FROM [Alphabetical list of products] WHERE ([CategoryName] = @CategoryName)", conn);
          sql.SelectCommand.Parameters.AddWithValue("@CategoryName", System.Data.SqlDbType.NVarChar).Value = "Condiments";
    
          DataSet ds = new DataSet();
          sql.Fill(ds);
    
          DropDownList1.DataSource = ds;
          DropDownList1.DataBind();
    
    

     

    В итоге в DropDownList1 у вас должно быть несколько элементов, отобрадатся они должны как System.Data.DataRowView

     


    Для связи [mail]
    20 января 2011 г. 12:55
    Модератор
  • Спасибо огромное за ответ.

    У меня данные выбираются нормально но потом я хочу выбранный Item с DropDownList записать в другую таблицу но почему на записывается не выбранный мною Item  а самый первый Item c DropDownList-а.

     protected void Page_Load(object sender, EventArgs e)
     {
      // Determine the currently logged on user's UserId
      MembershipUser currentUser = Membership.GetUser();
      Guid currentUserId = (Guid)currentUser.ProviderUserKey;
    
      //Connect to the database, retrieve data, and then fill the data in the DataSet.
      string myConnection = ConfigurationManager.ConnectionStrings["AzDASConnectionString"].ConnectionString;
      SqlDataAdapter myDataAdapter = new SqlDataAdapter("select Name from azdas_dealers where UserId =@UserId order by Name", myConnection);
      myDataAdapter.SelectCommand.Parameters.AddWithValue("@UserId", SqlDbType.NVarChar).Value = currentUserId;
    
      DataSet myDataSet = new DataSet();
      myDataAdapter.Fill(myDataSet);
      
      
      DropDownList1.DataSource=myDataSet;
      DropDownList1.DataBind();
    
     }
    

    Далее вот этим кодом записываю данные в другую таблицу: 

    protected void Button2_Click(object sender, EventArgs e) 
    MembershipUser currentUser = Membership.GetUser();
               Guid currentUserId = (Guid)currentUser.ProviderUserKey;    
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
              GridViewRow row = GridView1.Rows[i];
              bool isChecked = ((CheckBox)row.FindControl("chkSelect")).Checked;
    
              if (isChecked)
              {
    
                SqlConnection conn = new SqlConnection("server=local; Initial Catalog=AzDAS; User ID=admin; Password=admin ");
            
                SqlCommand BatchAdding = new SqlCommand("INSERT INTO azdas_Distributing (PhoneNumber, Dealer, PasSerial, Date, Company , ParentUserId) Values (@PhoneNumber, '"+DropDownList1.SelectedValue+"', @PasSerial, @Date, @Company , @ParentUserId)", conn);
    
                conn.Open();
                //Перенос данных в временную таблицу Дилеров
                BatchAdding.Parameters.AddWithValue("@PhoneNumber", GridView1.Rows[i].Cells[1].Text);
                //BatchAdding.Parameters.Add("@Dealer", DropDownList1.SelectedItem.Text);
                BatchAdding.Parameters.AddWithValue("@PasSerial", DropDownList1.SelectedItem.Text);
                BatchAdding.Parameters.AddWithValue("@Date", DateTime.Now);
                BatchAdding.Parameters.AddWithValue("@Company", GridView1.Rows[i].Cells[2].Text);
                BatchAdding.Parameters.AddWithValue("@ParentUserId", currentUserId.ToString());
                //BatchAdding.Parameters.AddWithValue("@DealersUserId", currentUserId.ToString());
                BatchAdding.ExecuteNonQuery();
                //Удаление данных со склада
                SqlCommand BatchDeleting = new SqlCommand("DELETE FROM azdas_NumberStorage WHERE PhoneNumber=@PhoneNumber", conn);
            
                BatchDeleting.Parameters.AddWithValue("@PhoneNumber", GridView1.Rows[i].Cells[1].Text);
                BatchDeleting.ExecuteNonQuery();
                conn.Close();
    
                Label1.Text = "Номера закреплены за дилером-"+DropDownList1.Text; //Show to user to which Dealer join numbers
    
                GridView1.Visible = false; //After all action Grid not visible
              }
    
          }
        
      }

     


    Crazy_Progi
    21 января 2011 г. 9:23
  • Оберните весь биндинг и работу с БД в PageLoad в условие проверки свойства Page.IsPostBack

        if (!Page.IsPostBack)
        {
           // подключение к БД, биндинг
        }



    Для связи [mail]
    • Помечено в качестве ответа I.Vorontsov 26 января 2011 г. 9:32
    21 января 2011 г. 11:13
    Модератор