вызвать RowDataBound из SelectedIndexChanged - PullRequest
0 голосов
/ 19 июня 2020

У меня есть GridView, и мне нужно, чтобы две вещи происходили, когда пользователь щелкает строку: 1. Создание другого gridview. 2. Обновление изображения в первом GridView.

Вот мой первый GridView:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                Height="271px" onselectedindexchanged="GridView1_SelectedIndexChanged" 
                style="font-family: Arial, Helvetica, sans-serif; text-align: center;" 
                Width="452px" DataKeyNames="messageCode" 
                onrowdatabound="GridView1_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="date" DataFormatString="{0:d}" HeaderText="date" />
                    <asp:BoundField DataField="messageSubject" HeaderText="subject" />
                            <asp:TemplateField>
        <ItemTemplate>
            <asp:Image runat="server" ID="img" />
        </ItemTemplate>
    </asp:TemplateField>
                    <asp:CommandField HeaderText="show message" ShowSelectButton="True" />
                </Columns>
            </asp:GridView>

И это другой GridView:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
                Height="102px" 
                style="font-family: Arial, Helvetica, sans-serif; text-align: center" 
                Visible="False" Width="345px">
                <Columns>
                    <asp:BoundField DataField="messageContent" HeaderText="content" />
                </Columns>
            </asp:GridView>

Мой код позади:

public partial class WebMessages : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = true;
        if (!IsPostBack)
        {
            GridView2.Visible = false;
            WebServiceDBMessages.WebServiceDBMessagesSoapClient dbm = new WebServiceDBMessages.WebServiceDBMessagesSoapClient();
            DataTable dt = dbm.ReturnAllMessagesForTeacher(Session["teacher"].ToString()).Tables[0];
            GridView1.DataSource = dt;
            GridView1.DataBind();
            //build the first GridView which shows to the user: date, message subject, image (if the message was read or not) and select field.
        }
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        WebServiceDBMessages.WebServiceDBMessagesSoapClient dbm = new WebServiceDBMessages.WebServiceDBMessagesSoapClient();
        GridView2.Visible = true;
        int messageCode = int.Parse(GridView1.SelectedDataKey.Value.ToString());
        DataTable dt = dbm.ReturnContentByCode(messageCode).Tables[0];
        GridView2.DataSource = dt;
        GridView2.DataBind();
        dbm.UpdateStatusToRead(messageCode);//The Database field update occurs here, but the image update only occurs in the GridView1_RowDataBound function.
        //build the second GridView which shows to the user the message content. 
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //DBMessages dbm=new DBMessages();
            WebServiceDBMessages.WebServiceDBMessagesSoapClient dbm = new WebServiceDBMessages.WebServiceDBMessagesSoapClient();
            string wasReadOrNot = dbm.ReturnIfWasRead(e.Row.Cells[1].Text);
            var image = e.Row.FindControl("img") as System.Web.UI.WebControls.Image;
            image.Width = 80;
            image.Height = 60;
            image.ImageUrl = wasReadOrNot == "not read" ? "/images/notRead.png" : "/images/read.png";
            GridView2.Visible = true;
        }
        //At the first loading of the page it shows the image in accordance with the field "wasReadOrNot" found in the Database.
        //I want this function to happen again after selecting a row in the first GridView.
    }
}

Как я могу вызвать функцию GridView1_RowDataBound в функции GridView1_SelectedIndexChanged? Или какие-то другие идеи могут решить мою проблему? Я пробовал и другие вещи, но во всех них происходит только одно - появляется второй GridView, но изображение не обновляется, или наоборот. Спасибо (:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...