Telstra Ответов: 2

Показать календарь на изображении нажмите кнопку в gridview


У меня есть gridview, календарь и кнопка изображения в gridview. При нажатии на изображение его выдает Ошибка. Код выглядит следующим образом.
protected void imgEndDate_Click1(object sender, ImageClickEventArgs e)
        {
            
            Calendar calendDate =
                             (Calendar)grvResourceDetail.SelectedRow.Cells[1].FindControl("calEndDate");
            calendDate.Visible = true;
        }


Это дает ошибку
Object reference not set to an instance of an object.

И управление календарем, и кнопка изображения находятся в поле itemtemplate gridview. Не удалось найти нулевой объект.

DamithSL

отладка и проверка того, какой объект является нулевым

Telstra

И управление календарем, и кнопка изображения находятся в поле itemtemplate gridview. Не удалось найти нулевой объект.

DamithSL

что такое полная ошибка с трассировкой стека? мы не можем отладить ваш код, вы должны это сделать.

Richard Deeming

Либо < codde>grvResourceDetail является null;
-или- grvResourceDetail не имеет выбранной строки;
-или- вторая ячейка выбранной строки не содержит элемента управления с идентификатором calEndDate.

Вам нужно отладить свой код, чтобы выяснить, какой из них имеет место, а затем выяснить, почему.

2 Ответов

Рейтинг:
2

yourfriendaks

Пример: попробуйте вот это

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand">
            <Columns>
                <asp:TemplateField HeaderText="Cal">
                    
                    <ItemTemplate>
                        <asp:Calendar runat="server" Visible="false"></asp:Calendar>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="img">
                    <ItemTemplate>
                        <asp:ImageButton ID="ImageButton1" CommandName="img" runat="server" text="show"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>

        </asp:GridView>
    </div>
    </form>
</body>
</html>






using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName=="img")
            {
                int index = Convert.ToInt32(e.CommandArgument.ToString());
                Calendar calendDate =
                             (Calendar)GridView1.Rows[index].FindControl("calEndDate");
            calendDate.Visible = true;
            }
           
        }
    }
}


Рейтинг:
1

Member 12978556

Вместо SelectedRow.Клетки[1]
вы можете попробовать вот это
Календарь calendate =
(Календарь)grvResourceDetail. Rows[0]. FindControl ("calEndDate");


CHill60

Неправильный. Этот код будет всегда смотреть только на первую строку в GridView.
И ответ на этот вопрос был дан (правильно) более года назад.