2015-10-25 1 views
0

У меня есть идентификатор заказа клиента, который мне нужен как SelectParameter для моего GridView заказанных продуктов, поэтому я храню его в скрытом поле (вне GridView). На той же странице я добавляю продукты в этот заказ, после чего я повторно привязываю GridView к этому продукту. Значение моего параметра каждый раз равно null, поэтому я не думаю, что он получает значение из скрытого поля. Я думал хранить его в ViewState, но не думаю, что вы можете получить значение ViewState из GridView SelectParameter или можете? В любом случае, если кто-нибудь скажет мне, почему использование значения скрытого поля вне GridView не будет работать (оно все еще в форме), это будет потрясающе! Кроме того, я бы хотел использовать ViewState, поэтому мне нужно было знать, каким будет мой код SelectParameter. Код выглядит следующим образом:Не удается получить доступ к значению, хранящемуся в скрытом поле от GridView

<form id="form1" runat="server"> 
    <asp:HiddenField ID="hSOId" runat="server" /> 
<div> 
<div class="row"> 
     <div class="col-md-12"> 
     <strong>Products:</strong> 
     <asp:GridView ID="gvOptions" runat="server" AutoGenerateColumns="False" CellPadding="10" CellSpacing="10" DataSourceID="SqlDataSource1" 
     ForeColor="#333333" GridLines="None" EmptyDataText="No Products Added" > 
     <AlternatingRowStyle BackColor="White" /> 
     <Columns> 
     <asp:BoundField DataField="Internal_Name" HeaderText="Product" SortExpression="Internal_Name" /> 
     <asp:BoundField DataField="Qty" HeaderText="Qty" SortExpression="Qty" /> 
     <asp:BoundField DataField="Total_Kilo_Weight" HeaderText="Weight" SortExpression="Total_Kilo_Weight" /> 
     <asp:BoundField DataField="Sales_Price" HeaderText="Price" SortExpression="Sales_Price" /> 
     <asp:BoundField DataField="ProfitMargin" HeaderText="Profit" SortExpression="ProfitMargin" />    
     <asp:BoundField DataField="Co_Depot" HeaderText="Depot" SortExpression="Co_Depot" /> 
     <asp:BoundField DataField="Pack_Date" HeaderText="Pack Date" DataFormatString="{0:d}" SortExpression="Pack_Date" /> 
     <asp:BoundField DataField="Delivery_Date" HeaderText="Delivery Date" DataFormatString="{0:d}" SortExpression="Delivery_Date" /> 
     </Columns> 
     <EditRowStyle BackColor="#2461BF" /> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#EFF3FB" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
     <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
     <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
     <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
     <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConn %>" 
     SelectCommand="spSalesOrderProductsRead" SelectCommandType="StoredProcedure" OnSelecting="gvOptions_Selecting"> 
     <SelectParameters> 
      <asp:FormParameter FormField="hSOId" Name="SalesOrderID"  Type="Int32" /> 
     </SelectParameters> 
     </asp:SqlDataSource> 
     </div><!-- end of column --> 
    </div><!-- end of row --> 
</div> 
</form> 
+3

Рассмотрим включая код, никто не хочет читать пункт и ответ в пункте – Imad

+1

очень беден информации. Пожалуйста, добавьте более подробную информацию и исходный код. –

+0

Я знаю, но это мой первый пост с кодом, и он говорит отступом на 4 строки, так что это займет у меня некоторое время - argghh! Выполнение этого сейчас :-) – user2492422

ответ

0

Я думаю, вы не можете сделать это в HTML-коде, но только код позади (C# или VB) - или, по крайней мере, снаружи.

Смотрите это, как получить информацию скрытого:

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.value(v=vs.110).aspx

+0

Спасибо - я могу установить и получить значения моего скрытого поля из моего кода позади, но параметр показывает значение null для значения, когда я отлаживаю его с помощью кода, чтобы определить значение в методе OnSelecting моего источника данных, так что почему я думаю, что, возможно, GridView не любит значения HiddenField в качестве параметров. Я googled и ничего не могу найти на этом, хотя. – user2492422

+0

Если ваше значение возвращает null, оно не связано с GridView или HiddenFields. Проблема может быть связана с событием, которое вы фокусируете (OnSelecting). Попробуйте увидеть, есть ли у вас другое событие (например, OnDataPropertyChanged или OnSelectedIndexChanged). См. Также TrackViewState здесь: https://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.gridview_methods(v=vs.110).aspx –

0

Уходит назад к старомодному способу, и это работает! Я сохранил идентификатор заказа клиента в объекте «Состояние представления», а затем извлек его, когда захотел восстановить его, и он отлично работает. Хотелось бы узнать, есть ли способ просто вызвать gvOptions.Bind(); и каким-то образом получить SelectParameter для получения значения View State - я уверен, что должен быть способ. Во всяком случае, чувствуя себя счастливым сейчас и надеюсь, что это может помочь другим:

protected void rebindGVProducts() 
    { 
    string strError = ""; 
    int soID = 0; 

    if(ViewState["SOID"] != null) 
     soID = Convert.ToInt32(ViewState["SOID"]); 
    //hSOId.Value = soID; 

    try 
    { 
     //Get all Products in this sales order 
     ConnectionStringSettings SHConn = ConfigurationManager.ConnectionStrings["Conn"]; 
     SqlConnection objConn = new SqlConnection(SHConn.ConnectionString); 
     //SqlDataReader objRdr; 
     SqlCommand objCmd; 

     objConn.Open(); 
     objCmd = new SqlCommand("spSalesOrderProductsRead", objConn); 
     objCmd.CommandType = CommandType.StoredProcedure; 
     objCmd.Parameters.AddWithValue("@SalesOrderID", soID); 
     SqlDataAdapter adapter = new SqlDataAdapter(objCmd); 
     DataSet ds = new DataSet(); 

     adapter.Fill(ds, "Products"); 

     gvProducts.DataSource = ds; 
     gvProducts.DataSourceID = String.Empty; 
     gvProducts.DataBind(); 

     //objRdr.Close(); 
     objConn.Close(); 
    } 
    catch (SqlException objSqlDbException) 
    { 
     foreach (SqlError objError in objSqlDbException.Errors) 
     { 
      //Response.Write("Error is: "+objError); 
      strError += objError; 
     } 
     //add errors to error log file ErrorLogFile.txt 
     reportError(strError); 

     Response.Write("Sorry - we are currenly experiencing problems with our database, please try again later."); 
    } 
}