2013-08-16 36 views
0

我有一個GV,我需要動態構建在過去180天內有過活動數據庫寫入的用戶列表。一頁獲得會員身份用戶名並將其寫入 表1。然後,我在該表上執行SELECT Distinct以填充DDL並將該值寫入Table2。問題是,當我嘗試設置DDL選擇的值通過SelectedValue='<%# Bind("DeliverPartTo") %>'我得到:問題頁面生成時從DropDown列表中選擇DB值

「DDL_DeliverPartTo」具有的SelectedValue,因爲它不在項目列表中存在哪些無效。 參數名:價值

下面是代碼:

<asp:TemplateField HeaderText="DeliverPartTo" SortExpression="DeliverPartTo"> 
       <ItemTemplate>       
        <asp:DropDownList ID="DDL_DeliverPartTo" runat="server" SelectedValue='<%# Bind("DeliverPartTo") %>'       DataSourceID="SQLTechs" DataTextField="RequestedBy" DataValueField="RequestedBy" 
         Height="25px" Width="135px" AutoPostBack="True" AppendDataBoundItems="true" 
         OnDataBound="SqlDS_DeliverPartTo_DataBinding" OnSelectedIndexChanged="DDL_DeliverPartTo_SelectedIndexChanged" 
         > 
         <asp:ListItem Text="" Enabled="true" Selected="True" Value='-1'></asp:ListItem> 
         <asp:ListItem Text="Stock" Enabled="true" Value='-1'></asp:ListItem> 
        </asp:DropDownList> 
        <asp:SqlDataSource ID="SQLTechs" runat="server" 
         ConnectionString="<%$ ConnectionStrings:inventory_v2ConnectionString %>" 
         SelectCommand="SELECT DISTINCT [RequestedBy] FROM [Process_PartRequests]"> 
        </asp:SqlDataSource> 
       </ItemTemplate> 
     </asp:TemplateField> 



<asp:SqlDataSource ID="SqlDataSource1" 
      runat="server" 
      ConnectionString="<%$ ConnectionStrings:inventory_v2ConnectionString %>" 
      SelectCommand="SELECT Process_WarrantyTracker.ID, Process_WarrantyTracker.RequestNumber, Process_PartRequests.DateRequested, Process_RequestStatuses.ID AS StatusID, 
         Process_RequestStatuses.StatusCode, Process_PartRequests.CATicketNumber, Process_PartRequests.SystemSerialNumber, 
         Models_PriModels.PriModel + '-' + Models_SecModels.SecModel + '-' + Models_FormFactor.Form AS Model, Part_Catalog.OEMPartCode, 
         Part_Groups.GroupType + ' - ' + Part_Groups.GroupName AS Groups, Process_PartRequests.RequestedBy, Models_OEMs.Manufacturer AS OEM, 
         Process_WarrantyTracker.DateOrderedFromOEM, Process_WarrantyTracker.OrderedByICGAdmin, Process_WarrantyTracker.OEMWorkOrderNumber, 
         Process_WarrantyTracker.PartSerialNumber, Process_WarrantyTracker.OrderRecievedDate, Process_WarrantyTracker.DeliverPartTo, 
         Process_WarrantyTracker.ProblemFlag, Process_WarrantyTracker.PartOfMultiPartOrder, Process_WarrantyTracker.ShipperTrackingNo, 
         Process_WarrantyTracker.ReturnOrderShipped, Process_WarrantyTracker.Comment1, Process_WarrantyTracker.Comment2 
FROM   Process_WarrantyTracker INNER JOIN 
         Process_PartRequests ON Process_WarrantyTracker.RequestNumber = Process_PartRequests.RequestNumber INNER JOIN 
         Process_RequestStatuses ON Process_PartRequests.RequestStatus = Process_RequestStatuses.ID INNER JOIN 
         Models ON Process_PartRequests.Model = Models.ID INNER JOIN 
         Models_FormFactor ON Models.FormFactor = Models_FormFactor.ID INNER JOIN 
         Models_OEMs ON Models.Manufacturer = Models_OEMs.ID INNER JOIN 
         Models_PriModels ON Models.PriModel = Models_PriModels.ID INNER JOIN 
         Models_SecModels ON Models.SecModel = Models_SecModels.ID INNER JOIN 
         Part_Catalog ON Process_PartRequests.OEMPartCode = Part_Catalog.ID INNER JOIN 
         Part_Groups ON Part_Catalog.GroupType = Part_Groups.ID 
         WHERE Process_RequestStatuses.ID != 4"> 

     </asp:SqlDataSource> 
protected void SqlDS_DeliverPartTo_DataBinding(object sender, EventArgs e) 
{ 
    try 
    { 
     GridViewRow gr = (GridViewRow)((DataControlFieldCell)((DropDownList)sender).Parent).Parent; 
     HiddenField RequestNumber = (HiddenField)gr.FindControl("RequestNumber"); 
     string ReqNum = RequestNumber.Value; 
     string query = "SELECT [DeliverPartTo] FROM [Process_WarrantyTracker] WHERE [RequestNumber] = @RequestNumber "; 
     DropDownList DDL_DeliverPartTo = (DropDownList)GridView1.FindControl("DDL_DeliverPartTo"); 
     SqlConnection connectionString = new SqlConnection(ConfigurationManager.ConnectionStrings["inventory_v2ConnectionString"].ConnectionString); 
     connectionString.Open(); 
     SqlCommand cmd = new SqlCommand(query, connectionString); 
     Object returnValue; 
     cmd.CommandText = query; 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.AddWithValue("@RequestNumber", ReqNum); 
     cmd.Connection = connectionString;    
     returnValue = cmd.ExecuteScalar(); 
     connectionString.Close(); 
     DDL_DeliverPartTo.SelectedValue = returnValue.ToString(); 
    } 
    catch (Exception ex) 
    { 
     //Response.Write(ex.Message); 
    } 
} 
protected void DDL_DeliverPartTo_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    GridViewRow gr = (GridViewRow)((DataControlFieldCell)((DropDownList)sender).Parent).Parent; 
    DropDownList DDL_DeliverPartTo = (DropDownList)gr.FindControl("DDL_DeliverPartTo"); 
    HiddenField RequestNumber = (HiddenField)gr.FindControl("RequestNumber"); 
    string ReqNum = RequestNumber.Value; 
    string query = "UPDATE [Process_WarrantyTracker] SET [DeliverPartTo][email protected] WHERE [RequestNumber] = @RequestNumber "; 
    SqlConnection connectionString = new SqlConnection(ConfigurationManager.ConnectionStrings["inventory_v2ConnectionString"].ConnectionString); 
    SqlCommand cmd = new SqlCommand(query, connectionString); 
    cmd.Connection.Open(); 
    cmd.Parameters.Add("@DeliverPartTo", DDL_DeliverPartTo.SelectedValue); 
    cmd.Parameters.Add("@RequestNumber", ReqNum); 
    cmd.CommandType = CommandType.Text; 
    Object ddlValues; 
    ddlValues = cmd.ExecuteScalar(); 
    cmd.Connection.Close(); 
    cmd.Connection.Dispose(); 
    Response.Redirect("Admin-WarrantyTracker.aspx"); 

} 
+1

'Text'不是'DropDownList'的屬性。 –

+0

糟糕,這是一個錯誤的複製/粘貼。它應該是SelectedValue ='<%#綁定(「DeliverPartTo」)%>',這會導致所描述的問題。 – user1431356

+0

你的錯誤消息告訴你,你有一個項目,你試圖設置爲選中,不在你的DropDownList。您是否已驗證'DeliverPartTo'的所有可能性都在您的DDL中? –

回答

0

的SelectedValue這樣亙古不變的工作。取而代之的DDL_DeliverPartTo.SelectedValue = returnValue.ToString();嘗試:

DDL_DeliverPartTo.SelectedIndex = DDL_DeliverPartTo.Items.IndexOf(DDL_DeliverPartTo.Items.FindByValue(returnValue.ToString())); 

編輯:你必須找到在GridView_RowDataBound和數據行的控制。請嘗試下面的代碼:

void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 

    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     try 
     { 
      GridViewRow gr = e.Row; 
      HiddenField RequestNumber = (HiddenField)gr.FindControl("RequestNumber"); 
      string ReqNum = RequestNumber.Value; 
      string query = "SELECT [DeliverPartTo] FROM [Process_WarrantyTracker] WHERE [RequestNumber] = @RequestNumber "; 
      DropDownList DDL_DeliverPartTo = (DropDownList)gr.FindControl("DDL_DeliverPartTo"); 
      SqlConnection connectionString = new SqlConnection(ConfigurationManager.ConnectionStrings["inventory_v2ConnectionString"].ConnectionString); 
      connectionString.Open(); 
      SqlCommand cmd = new SqlCommand(query, connectionString); 
      Object returnValue; 
      cmd.CommandText = query; 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@RequestNumber", ReqNum); 
      cmd.Connection = connectionString; 
      returnValue = cmd.ExecuteScalar(); 
      connectionString.Close(); 
      DDL_DeliverPartTo.SelectedIndex = DDL_DeliverPartTo.Items.IndexOf(DDL_DeliverPartTo.Items.FindByValue(returnValue.ToString())); 
     } 
     catch (Exception ex) 
     { 
      //Response.Write(ex.Message); 
     } 
    } 
} 
+0

當我在OnDataBound或OnDataBinding中嘗試時仍然空白。 – user1431356

+0

請參閱我編輯的答案。 – afzalulh

+0

那麼,這將比我想要做的更有意義:D謝謝! – user1431356

相關問題