Pahi2317 Ответов: 4

Как найти id с помощью hiddenfield в gridview on button click & button is outside gridview C#


How to find id using Hiddenfield in Gridview on button click & button is outside Gridview C# I am trying but its showing error "Object reference not set to an instance of an object." on "string strhfId = (gvRow.FindControl("hfId") as HiddenField).Value;"

I have tried different too
HiddenField hfId = (HiddenField)gridData.SelectedRow.Cells[0].FindControl("hfId");

but error is same


Что я уже пробовал:

protected void lnkUpdate_Click(object sender, EventArgs e)
        {
            //HiddenField hfId = (HiddenField)gridData.SelectedRow.Cells[0].FindControl("hfId");
            
         
            //HiddenField strId = ((HiddenField)gridData.Rows[0].FindControl("hfIdValue"));
            //String value = strId.Value;
          
          
            LinkButton btn = sender as LinkButton;
            GridViewRow gvRow = btn.NamingContainer as GridViewRow;
            string strhfId = (gvRow.FindControl("hfId") as HiddenField).Value;
                try
                {
                   

                    //HiddenField hfIdc = (HiddenField)gridData.SelectedRow.Cells[0].FindControl("hfIdValue");
                    List<SqlParameter> parameters = new List<SqlParameter>
                    {
                    };
                    parameters.Add(new SqlParameter("@P_APPLICATION_ID", strhfId));
                    parameters.Add(new SqlParameter("@P_APPLICATION_NAME", txtApplicationName.Text));
                
                    parameters.Add(new SqlParameter("@P_MODE", "E"));

                    string strResponse = objAppFunctionModule.ExecuteNonQueryMethod(strUSP_APPLICATION_MST, parameters);
                 
                    
                        PopulateGrid();
                   
             
                }


                catch (Exception ex)
                {
                    lblResponse.Text = ex.Message;
                }
            
        }



Разметка;

<asp:GridView ID="gridData" runat="server" AutoGenerateColumns="False" OnRowDataBound="gridData_RowDataBound"
                                        RowStyle-HorizontalAlign="Center" ShowHeaderWhenEmpty="true" OnRowCommand="gridData_RowCommand"
                                        EmptyDataText="No Data for the Selected Value" BackColor="White" BorderColor="#c5c5c5" BorderWidth="1px" Width="100%"
                                        CellPadding="4" AllowPaging="True">
                                        <columns>
                                            <asp:templatefield>
                                                <ItemStyle />
                                                <HeaderStyle CssClass="ItemStyle" />
                                                <headertemplate>
                                                    <asp:CheckBox ID="chkAll" class="cbAll" runat="server" onclick="javascript:SelectAllCheckboxes1(this);" />
                                                
                                                <itemtemplate>
                                                    <asp:CheckBox ID="chkMultiDelete" runat="server" />
                                                
                                            

                                            <asp:TemplateField HeaderText="Application Name">
                                                <ItemStyle />
                                                <HeaderStyle CssClass="ItemStyle" />
                                                <itemtemplate>
                                                    <asp:Label ID="lblApplicationName" runat="server" Text='<%#Eval("APPLICATION_NAME") %>'>
                                                    <asp:HiddenField runat="server" ID="hfId" Value='<%#Eval("APPLICATION_ID")%>'>
                                                
                                                                                 
                                            <asp:TemplateField HeaderText="Edit">
                                                <ItemStyle />
                                                <HeaderStyle CssClass="ItemStyle" />
                                                <itemtemplate>
                                                    <asp:LinkButton ID="lnkEdit" class="btn btn-default" CommandName="EditButton" CommandArgument='<%# ((GridViewRow) Container).RowIndex + ";" %>' runat="server">Edit

F-ES Sitecore

Вам также нужно будет разместить надбавку, неясно, где находится это скрытое поле. Если скрытое поле является asp:Hidden и находится за пределами gridview, то вы должны иметь возможность ссылаться на него как обычно

нпид.Значение

Pahi2317

&ЛТ;в ASP:GridView в идентификатор="файле griddata" атрибут runat="сервер" AutoGenerateColumns="false" - в OnRowDataBound="gridData_RowDataBound"
RowStyle-HorizontalAlign="Center" ShowHeaderWhenEmpty="true" OnRowCommand="gridData_RowCommand"
EmptyDataText="нет данных для выбранного значения" BackColor="Белый" BorderColor="#c5c5c5" BorderWidth="1px" Width="100%"
CellPadding="4" AllowPaging="True">
<колонки>
<asp:templatefield>
<ItemStyle />
<HeaderStyle CssClass="ItemStyle" />
<headertemplate>
&ЛТ;АСП:чекбокс с ID="chkAll" класс="cbAll" атрибут runat="сервер" функция onclick="JavaScript для:SelectAllCheckboxes1(этот);" /&ГТ;

<itemtemplate>
<asp:CheckBox ID="chkMultiDelete" runat="server" />



<asp:TemplateField HeaderText="имя приложения">
<ItemStyle />
<HeaderStyle CssClass="ItemStyle" />
<itemtemplate>
&ЛТ;АСП:метка идентификатор="lblApplicationName" атрибут runat="сервер" текст=в'<%#Ивала("ИМЯ_ПРИЛОЖЕНИЯ") %&ГТ; в'>
&ЛТ;как ASP:HiddenField значение runat="сервер" идентификатор="нпид" значение=в'<%#Ивала("APPLICATION_ID")%&ГТ; в'>


<asp:TemplateField HeaderText="Edit">
<ItemStyle />
<HeaderStyle CssClass="ItemStyle" />
<itemtemplate>
&ЛТ;как ASP:LinkButton элемент ID="lnkEdit" класс="БТН БТН-умолчанию" Имя_команды="нажмите кнопку Изменить" CommandArgument='&л;%# ((GridViewRow) контейнер).Параметр rowindex + ";" %&ГТ;' атрибут runat="сервер"и GT;Редактировать

Richard Deeming

"... кнопка находится вне таблицы ..."
"btn.NamingContainer as GridViewRow"

Если кнопка находится за пределами GridView, тогда почему вы предполагаете, что его контейнер именования будет GridViewRow?

4 Ответов

Рейтинг:
2

Ziee-M

Привет,

Идея состоит в том, чтобы заполнить ваше скрытое поле, когда пользователь выбирает строку из gridview.
Сначала вы должны добавить событие SelectedIndexchanged в тег Gridview :

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="false" OnSelectedIndexChanged = "OnSelectedIndexChanged">

ваш код позади должен выглядеть так :
protected void OnSelectedIndexChanged(object sender, EventArgs e)
{
    //Accessing the id field using  Column index : i supposed your index is the 
    //first column here "0"
    string id = GridView1.SelectedRow.Cells[0].Text;
    //Or
    //you can aslo access the field by its name : make sure to specify the column 
    //type (label in this example)
    string id = (GridView1.SelectedRow.FindControl("id") as Label).Text;
    //bind the value to the hidden field
    hfId.Text = id; //the hidden filed is not related to Gridview, its just a html 
    //tag with hfId as its Id 

}

как только пользователь нажмет на кнопку ввода, вам просто нужно получить скрытое значение поля
protected void lnkUpdate_Click(object sender, EventArgs e)
        {
int selectedId =  Convert.toInt32(hfId.Text); //this is a little risky since the //hfText value can be a non Int. better use a TryParse.
}

Если я неправильно понял, и скрытое поле находится в gridview, все, что было показано ранее, все еще действительно, вам просто нужно заполнить глобальную переменную вместо скрытого поля (когда пользователь выбирает строку) и получить доступ к нему, когда пользователь нажимает кнопку linkbutton.

Надеюсь, это поможет.


Рейтинг:
1

Pahi2317

привет....
Я хочу, чтобы значение Hiddenfield при нажатии кнопки находилось вне gridview, а не в событии RowCommand...
пожалуйста, помогите мне


F-ES Sitecore

Прекратите публиковать комментарии\вопросы в качестве решений, это не формат обсуждения на форуме. Пока вы получаете необходимые данные, какая разница, какое событие вы используете?

охраняемых недействительными lnkEdit_Click(объект отправителя, EventArgs в электронной)
{
LinkButton l = (LinkButton)отправитель;

показатель инт = инт.Синтаксический анализ(л.CommandArgument.Метод toString());

GridViewRow row = gridData.Rows[индекс];
HiddenField hfId = (HiddenField)строка.Ячейки[1].FindControl("hfId");
}

Pahi2317

Хии,
показатель инт = инт.Синтаксический анализ(л.CommandArgument.Метод toString());
ошибка в этой строке
"Входная строка была не в правильном формате."
я не понимаю, как мне это исправить? Пожалуйста, помогите мне ... это очень нужно

F-ES Sitecore

Посмотрите на первый комментарий в решении 3.

Pahi2317

Хии, я сделал это, но ничего не произошло снова та же ошибка правильного форамта.

F-ES Sitecore

Что находится в "l.CommandArgument"?

Pahi2317

я отлаживаю и показываю "" ничего не значит это null

Pahi2317

а вот и моя пуговица
&ЛТ;как ASP:LinkButton элемент ID="lnkEdit" класс="БТН БТН-умолчанию" Имя_команды="нажмите кнопку Изменить" CommandArgument='&л;%#((GridViewRow)контейнер).Параметр rowindex%&ГТ;' атрибут runat="сервер"и GT;Редактировать

F-ES Sitecore

Не слишком уверен, что сказать, но для меня это работает нормально.

Pahi2317

все в порядке, я нашел свою ошибку ... большое спасибо, сэр!!!!!!

Laxmidhar tatwa technologies

Для каждой строки(gridviewrow в griviewname.rows)
{
//
}

Рейтинг:
0

F-ES Sitecore

Измените commandargument, чтобы удалить ";"

CommandArgument='<%# ((GridViewRow) Container).RowIndex %>'


Затем подключитесь к событию команды сетки, а не к событию щелчка кнопки ссылки

protected void gridData_RowCommand(object sender, GridViewCommandEventArgs e)
{
    GridView g = (GridView)sender;

    int index = int.Parse(e.CommandArgument.ToString());

    GridViewRow row = g.Rows[index];
    HiddenField hfId = (HiddenField) row.Cells[1].FindControl("hfId");
}


Однако вам, вероятно, лучше использовать встроенную редактируемую структуру строк gridview.


Рейтинг:
0

Pahi2317

привет,
не работает снова та же ошибка
"

Object reference not set to an instance of an object.
"


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" кнопка под этим решением.

НЕ опубликуйте свой комментарий как новое "решение".