abmkp Ответов: 1

Передача значения selecteditem gridview на другую страницу в виде строки


Мои gridviews OnrowDataBounding, onselectedindexchanged события работают нормально. после выбора элемент управления переходит на другую страницу, как и предполагалось, но значение selectedindex datakey равно null даже в вызывающей странице и на странице details.aspx. Мне нравится передавать это значение selectedindex в строку и тем самым использовать в querystring на странице сведений. пожалуйста, помогите мне с правильным кодированием.

Я также попробовал, как было предложено в http://www.codeproject.com/Questions/103062/How-to-get-the-value-of-a-selected-row-in-gridview


Мой код выглядит следующим образом
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "False" AllowPaging="true"

    OnPageIndexChanging="gdv1_OnPaging" PageSize="5" DataKeyNames = "Material"

     OnRowDataBound = "gv1_OnRowDataBound" OnSelectedIndexChanged = "gv1_SelectedIndexChanged"

                    CSSClass= "~/Styles" EnableViewState="False" PagerSettings-Mode="Numeric" AutoGenerateSelectButton="true">

 protected void gv1_OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes["onclick"] =     Page.ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex);
            e.Row.ToolTip = "Click to select this row.";
        }
    }
protected void gv1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int selectedIndex = GridView1.SelectedIndex;
        string selectedMaterial = (GridView1.DataKeys[selectedIndex]).Value.ToString();
        Server.Transfer("Details.aspx");
    }
//code in details.aspx
 protected void Page_Load(object sender, EventArgs e)
    {
        if (this.Page.PreviousPage != null)
        {
           GridView GridView1 =  GridView)this.Page.PreviousPage.FindControl("GridView1");
            int selectedIndex = GridView1.SelectedIndex;

            string selectedMaterial = (GridView1.DataKeys[selectedIndex]).ToString();
}


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

//int selectedIndex = Convert.ToInt32(GridView1.SelectedDataKey[1].ToString());
 int selectedIndex = GridView1.SelectedIndex;
 string customID = (GridView1.DataKeys[selectedIndex]["pkCityId"]).ToString();

1 Ответов

Рейтинг:
2

an0ther1

Привет abmkp,
Вам нужно добавить столбец pkCityId в свойство DataKeyNames сетки, как показано ниже;

<asp:gridview id="GridView1" runat="server" autogeneratecolumns="False" allowpaging="true" OnPageIndexChanging="gdv1_OnPaging" PageSize="5" DataKeyNames = "Material,pkCityId" OnRowDataBound = "gv1_OnRowDataBound" OnSelectedIndexChanged = "gv1_SelectedIndexChanged" CSSClass= "~/Styles" EnableViewState="False" PagerSettings-Mode="Numeric" AutoGenerateSelectButton="true"</asp:gridview>


с уважением


abmkp

Привет, мои фактические Detakeynames - это только "материал", и я добавил его. "pkcityId" был упомянут только в качестве примера.

an0ther1

Чтобы получить значение поля, вам нужно использовать следующее;
строка customID = GridView1.DataKeys[selectedIndex]["mycolumnname"].Метод toString();
Но имя столбца должно быть включено в свойство DataKeyNames определения сетки.
Предположим, что у вас есть поля MaterialId, Material, pkCityId и CityName в качестве столбцов сетки, и вы хотите получить значения MaterialId и pkCityId из вашего кода, чтобы добавить их к именам данных и получить к ним доступ с помощью приведенного выше кода.
Кроме того, проверьте значение GridView.Свойства selectedIndex. Лично я использую следующее;
int intRow = this.GridView1.SelectedRow.Параметр rowindex;

с уважением