Не удается получить доступ к значению, хранящемуся в скрытом поле, из GridView

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

<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> 

person user2492422    schedule 25.10.2015    source источник
comment
Рассмотрите возможность включения кода, никто не хочет читать параграф и отвечать в параграфе   -  person Imad    schedule 25.10.2015
comment
очень скудная информация. Пожалуйста, добавьте больше деталей и исходный код   -  person Imran Shamszadeh    schedule 25.10.2015
comment
Я знаю, но это мой первый пост с кодом, и в нем говорится об отступе на 4 строки, так что это займет у меня некоторое время - ааааа! Делаю сейчас :-)   -  person user2492422    schedule 25.10.2015
comment
Кнопка квадратных скобок в редакторе может сделать для вас отступ текста. :-)   -  person ConnorsFan    schedule 25.10.2015


Ответы (2)


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

Посмотрите, как получить информацию о HiddenField:

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

person David BS    schedule 25.10.2015
comment
Спасибо - я могу установить и получить значения моего скрытого поля из моего кода, но параметр показывает нуль для значения, когда я отлаживаю его, используя код для определения значения в методе OnSelecting моего источника данных, поэтому я думаю, что может быть GridView не любит значения HiddenField в качестве параметров. Я гуглил и не могу найти ничего по этому поводу. - person user2492422; 25.10.2015
comment
Если ваше значение возвращает null, это не связано с GridView или HiddenFields. Проблема может быть связана с событием, на котором вы фокусируетесь (OnSelecting). Попробуйте посмотреть, есть ли у вас другое событие (например, OnDataPropertyChanged или OnSelectedIndexChanged). См. также TrackViewState здесь: msdn.microsoft.com/pt-br/library/ - person David BS; 25.10.2015

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

  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.");
    }
}
person user2492422    schedule 25.10.2015