【发布时间】:2016-01-20 12:23:30
【问题描述】:
我有两个 GridView。一个只显示日期和用户,第二个显示一个列表,每个项目旁边都有一个复选框。
我已将gridview 中的日期设为查看第二个gridview 的链接,这样用户就可以看到哪些项目被勾选了。问题是即使我选择了第二行,它也只显示第一行的信息。
如图所示,我单击了顶部 GridView 中的第二行。但是第二个 GridView 中显示的信息不是我单击的行。它应该显示 ID 395545 的信息
我发现问题在于回发:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
List<lookupCVRT> work = lookupCVRT.GetCVRTItems(Company.Current.CompanyID, ParentID.ToString());
ViewState["CVRT"] = work;
gvCVRT.DataSource = work;
gvCVRT.DataBind();
if (work.Count > 0)
{
string numberToView = gvCVRT.Rows[0].Cells[0].Text;
List<lookupCVRT> workDetails = lookupCVRT.GetChecklistItemsByChecklistID(Company.Current.CompanyID, ParentID.ToString(), numberToView.ToString());
gvCVRTDetails.DataSource = workDetails;
gvCVRTDetails.DataBind();
}
}
}
此代码加载第一个 GridView 的信息,然后根据此 GridView 中的 ID,它加载第二个 GridView。问题是它只加载第一行的 ID。因此,当它绑定第二个 GridView 时,它只查看第一个 ID。
有没有办法强制回发,以便第二个 Grid 为我选择的行的 ID 重新加载?
这里是 GridView 代码:
<div id="divCVRT">
<fieldset class="groupbox" >
<div style="width:100%;">
<asp:UpdatePanel ID="udpCVRT" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:GridView style="width:75%"
ID="gvCVRT"
ShowHeaderWhenEmpty="true"
CssClass="tblResults"
runat="server"
OnRowDataBound="gvCVRT_RowDataBound"
DataKeyField="ID"
AutoGenerateColumns="false"
allowpaging="false"
AlternatingRowStyle-BackColor="#EEEEEE">
<HeaderStyle CssClass="tblResultsHeader" />
<Columns>
<asp:BoundField DataField="ChecklistID" HeaderText="ID" ></asp:BoundField>
<asp:BoundField DataField="ChecklistDate" HeaderText="Checklist Date" dataformatstring="{0:dd/MM/yyyy}"></asp:BoundField>
<asp:BoundField DataField="User" HeaderText="User" ></asp:BoundField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:LinkButton title="Add CVRT" id="btnAddCVRT" OnClick="btnAddCVRT_Click" runat="server" style="cursor:pointer;">
<img src="../images/icons/buttons/basic1-072.png" />
</asp:LinkButton>
</div>
</fieldset>
</div>
<div id="divCVRTDetails" style="display:none">
<fieldset class="groupbox" >
<div style="width:100%;">
<asp:UpdatePanel ID="udpCVRTDetails" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:GridView style="width:75%"
ID="gvCVRTDetails"
ShowHeaderWhenEmpty="true"
CssClass="tblResults"
runat="server"
OnRowDataBound="gvCVRTDetails_RowDataBound"
DataKeyField="ID"
AutoGenerateColumns="false"
allowpaging="false"
AlternatingRowStyle-BackColor="#EEEEEE">
<HeaderStyle CssClass="tblResultsHeader" />
<Columns>
<asp:BoundField DataField="ChecklistID" HeaderText="ID" ></asp:BoundField>
<asp:BoundField DataField="Description" HeaderText="Checklist Items"></asp:BoundField>
<asp:TemplateField HeaderText ="Checked?" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox ID="chkChecked" runat="server" ></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnUpdateCVRT" />
<asp:AsyncPostBackTrigger ControlID="btnAddCVRT" />
</Triggers>
</asp:UpdatePanel>
<asp:LinkButton ID="btnUpdateCVRT" OnClientClick="CloseAddEditCVRT()" OnClick="btnUpdateCVRT_Click" runat="server" style="float:left" CssClass="btnSaveSmall" ></asp:LinkButton>
<a title="Close CVRT Details" id="btnCloseCVRTDetails" runat="server" class="btnCancelSmall" style="cursor:pointer; margin-left:40px">
</a>
</div>
</fieldset>
子gridview后面的代码:
protected void gvCVRTDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
lookupCVRT work = (lookupCVRT)e.Row.DataItem;
GridView gv = sender as GridView;
e.Row.Attributes.Add("ID", "gvCVRTDetails_" + work.ID);
e.Row.Cells[0].Attributes.Add("onclick", "event.stopPropagation();");
HtmlGenericControl lnkShowHide = (HtmlGenericControl)e.Row.FindControl("lnkShowHide");
HyperLink ChecklistItem = (HyperLink)e.Row.FindControl("ID");
CheckBox chkChecked = e.Row.FindControl("chkChecked") as CheckBox;
chkChecked.Attributes.Add("onclick", "UpdateCheckedBox(" + work.ID.ToString() + ", this.value);");
chkChecked.Checked = work.Checked;
}
}
【问题讨论】:
标签: javascript c# jquery asp.net gridview