2013-07-09 61 views
0

我有一个DropDownList,我想选择一个ID和它的名字两次,把它放到DataSet并绑定到DropDownList。下面的代码是我的数据绑定。DropDownList选择不正确的值

using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
{ 
    string selectQuery1 = "SELECT [profileID], [profileName], [positionID], [positionName] from vw_profile WHERE [email protected]"; 
    SqlCommand cmd1 = new SqlCommand(selectQuery1, conn1); 
    cmd1.Parameters.AddWithValue("@memberID", memberID); 

    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = cmd1; 
    DataSet ds = new DataSet(); 
    conn1.Open(); 
    da.Fill(ds); 
    conn1.Close(); 

    chooseProfile.DataSource = ds; 
    chooseProfile.DataTextField = "profileName"; 
    chooseProfile.DataValueField = "profileID"; 
    chooseProfile.DataBind(); 

    choosePosition.DataSource = ds; 
    choosePosition.DataTextField = "positionName"; 
    choosePosition.DataValueField = "positionID"; 
    choosePosition.DataBind(); 
} 

在我的ASP.NET页面上,当用户点击Submit时,它意味着获取值并插入到表中。

protected void submitReport_Click(object sender, EventArgs e) 
{ 
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
    { 
     string selectQuery = "SELECT * FROM vw_profile"; 
     SqlCommand cmd = new SqlCommand(selectQuery, conn); 
     conn.Open(); 
     SqlDataReader viewReader; 
     viewReader = cmd.ExecuteReader(); 
     while (viewReader.Read()) 
     { 
      var memberID = (string)viewReader["memberID"].ToString(); 

      using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
       { 
       string selectQuery1 = "SELECT * from vw_profile WHERE [email protected]"; 
       SqlCommand cmd1 = new SqlCommand(selectQuery1, conn); 
       cmd1.Parameters.AddWithValue("@memberID", memberID); 
       conn1.Open(); 
       int submitProfileID = Convert.ToInt32(chooseProfile.SelectedItem.Value); 
       int submitPositionID = Convert.ToInt32(choosePosition.SelectedItem.Value); 
       DateTime dateTime = DateTime.Now; 
       string date = dateTime.GetDateTimeFormats('d')[0]; 
       int reportNum; 
       reportNum = Convert.ToInt32(viewReader["reportNumber"]); 
       reportNum++; 
       string reportTitle = "#" + reportNum + " - " + date; 

       SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString); 
       conn2.Open(); 
       SqlCommand cmd2 = new SqlCommand("INSERT INTO sfgs_reports(profileID,memberID,positionID,reportTitle,reportContent,reportDateStamp,reportNumber) values (@profileID,@memberID,@positionID,@reportTitle,@content,@datestamp,@reportNumber)", conn2); 
       cmd2.Parameters.AddWithValue("@content", reportContent.Text); 
       cmd2.Parameters.AddWithValue("@memberID", memberID); 
       cmd2.Parameters.AddWithValue("@profileID", submitProfileID); 
       cmd2.Parameters.AddWithValue("@positionID", submitPositionID); 
       cmd2.Parameters.AddWithValue("@reportTitle", reportTitle); 
       cmd2.Parameters.AddWithValue("@datestamp", dateTime); 
       cmd2.Parameters.AddWithValue("@reportNumber", reportNum); 
       cmd2.ExecuteNonQuery(); 
       conn2.Close(); 
      } 
     } 
     conn.Close(); 
    } 
} 

现在是什么时候有人提出的情况是,而不是抓住从一个我选择Value,它抓住了默认值,在默认情况下,DropDownList显示的一个。任何人都可以看到这个代码中可能导致此错误的任何错误?

编辑,显示更新submitReport_Click方法:

protected void submitReport_Click(object sender, EventArgs e) 
{ 
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
    { 
     string selectQuery = "SELECT * FROM vw_profile WHERE [email protected]"; 
     SqlCommand cmd = new SqlCommand(selectQuery, conn); 
     cmd.Parameters.AddWithValue("@currentUser", User.Identity.Name); 
     conn.Open(); 
     SqlDataReader viewReader; 
     viewReader = cmd.ExecuteReader(); 
     while (viewReader.Read()) 
     { 
      var memberID = (string)viewReader["memberID"].ToString(); 

      if (!Page.IsPostBack) 
      { 
       using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
       { 
        string selectQuery1 = "SELECT [profileID], [profileName], [positionID], [positionName] from vw_profile WHERE [email protected]"; 
        SqlCommand cmd1 = new SqlCommand(selectQuery1, conn1); 
        cmd1.Parameters.AddWithValue("@memberID", memberID); 

        SqlDataAdapter da = new SqlDataAdapter(); 
        da.SelectCommand = cmd1; 
        DataSet ds = new DataSet(); 
        conn1.Open(); 
        da.Fill(ds); 
        conn1.Close(); 

        chooseProfile.DataSource = ds; 
        chooseProfile.DataTextField = "profileName"; 
        chooseProfile.DataValueField = "profileID"; 
        chooseProfile.DataBind(); 

        choosePosition.DataSource = ds; 
        choosePosition.DataTextField = "positionName"; 
        choosePosition.DataValueField = "positionID"; 
        choosePosition.DataBind(); 
       } 
      } 

      using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
      { 
       string selectQuery1 = "SELECT * from vw_profile WHERE [email protected]"; 
       SqlCommand cmd1 = new SqlCommand(selectQuery1, conn); 
       cmd1.Parameters.AddWithValue("@memberID", memberID); 
       conn1.Open(); 
       int submitProfileID = Convert.ToInt32(chooseProfile.SelectedItem.Value); 
       int submitPositionID = Convert.ToInt32(choosePosition.SelectedItem.Value); 
       DateTime dateTime = DateTime.Now; 
       string date = dateTime.GetDateTimeFormats('d')[0]; 
       int reportNum = 1; 
       string reportTitle = "#" + reportNum + " - " + date; 

       SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString); 
       conn2.Open(); 
       SqlCommand cmd2 = new SqlCommand("INSERT INTO sfgs_reports(profileID,memberID,positionID,reportTitle,reportContent,reportDateStamp,reportNumber) values (@profileID,@memberID,@positionID,@reportTitle,@content,@datestamp,@reportNumber)", conn2); 
       cmd2.Parameters.AddWithValue("@content", reportContent.Text); 
       cmd2.Parameters.AddWithValue("@memberID", memberID); 
       cmd2.Parameters.AddWithValue("@profileID", submitProfileID); 
       cmd2.Parameters.AddWithValue("@positionID", submitPositionID); 
       cmd2.Parameters.AddWithValue("@reportTitle", reportTitle); 
       cmd2.Parameters.AddWithValue("@datestamp", dateTime); 
       cmd2.Parameters.AddWithValue("@reportNumber", reportNum); 
       cmd2.ExecuteNonQuery(); 
       conn2.Close(); 

       Page.Response.Redirect("default.aspx?ResponseCode=3", false); 
      } 
     } 
     conn.Close(); 
    } 
} 
+0

即使你绑定你的下拉? –

+0

对不起,你不是很确定你的意思。代码的顶部框在我的Page_Load中,然后我有一个提交按钮单击方法来获取该值并将它和其他信息插入到表中。 – Trido

+0

什么是选择配置文件?下拉列表 ? – mck

回答

2

正如你说你的下拉绑定代码在页面加载事件......把你的代码在此块我敢肯定它会工作..

if(!Page.IsPostBack) 
{ 
using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["SFGSConnectionString1"].ConnectionString)) 
{ 
    string selectQuery1 = "SELECT [profileID], [profileName], [positionID], [positionName] from vw_profile WHERE [email protected]"; 
    SqlCommand cmd1 = new SqlCommand(selectQuery1, conn1); 
    cmd1.Parameters.AddWithValue("@memberID", memberID); 

    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = cmd1; 
    DataSet ds = new DataSet(); 
    conn1.Open(); 
    da.Fill(ds); 
    conn1.Close(); 

    chooseProfile.DataSource = ds; 
    chooseProfile.DataTextField = "profileName"; 
    chooseProfile.DataValueField = "profileID"; 
    chooseProfile.DataBind(); 

    choosePosition.DataSource = ds; 
    choosePosition.DataTextField = "positionName"; 
    choosePosition.DataValueField = "positionID"; 
    choosePosition.DataBind(); 
} 
} 

因为当您点击一个按钮POSTBACK发生在您的button click事件运行之后第一个pageload事件运行。由于您的Page Load事件在您的Button Click之前运行,您的DropDownList已绑定再次设置为其默认值。因此在绑定下拉列表中检查它不应该是回发呼叫。为此,我使用Page.IsPostBack,其中回发呼叫或正常呼叫。

+0

谢谢。我正在尝试这个。 – Trido

+0

嗯,仍然没有工作。你能否告诉我,我是否正确修改了我的'SubmitReport_Click'方法?我更新了我的问题。 – Trido

+0

@Trido把你的页面加载下拉列表控件,该块没有把该块放在按钮单击....你的按钮点击是正确的把你的下拉菜单上的绑定代码页面加载事件,如果块... –

1

尝试把代码是这样的:

如果 { dropdownlistname.items.clear();(的IsPostBack!) 做的事情绑定的价值 }