Ich habe eine 2 Gridviews. Das erste Raster hat eine Schaltfläche, die beim Klicken auf ein zweites Raster mit den Daten auf der Grundlage der ID der Schaltfläche, auf die geklickt wird, gefüllt wird.RowDataBound von einer anderen Funktion aufrufen
Ich habe dann Code in der RowDataBound-Funktion, um das Raster basierend auf der ausgewählten Zeile anzuzeigen. Das Problem ist jedoch, dass der Code automatisch RowDataBound vor der Populate-Funktion ausführt. Das zweite Raster wird also nicht angezeigt.
-Code für Gridview:
<asp:GridView style="width:75%"
ID="gvCVRT"
ShowHeaderWhenEmpty="true"
CssClass="tblResults"
runat="server"
OnRowDataBound="gvCVRT_RowDataBound"
OnSelectedIndexChanged="gridviewParent_SelectedIndexChanged"
DataKeyField="ID"
DataKeyNames="ChecklistID"
AutoGenerateColumns="false"
allowpaging="false"
AlternatingRowStyle-BackColor="#EEEEEE">
<HeaderStyle CssClass="tblResultsHeader" />
<Columns>
<asp:BoundField DataField="ChecklistID" HeaderText="ID" ></asp:BoundField>
<asp:CommandField ShowSelectButton="True" HeaderText="Select" />
<asp:BoundField DataField="ChecklistDate" HeaderText="Checklist Date" dataformatstring="{0:dd/MM/yyyy}"></asp:BoundField>
<asp:BoundField DataField="User" HeaderText="User" ></asp:BoundField>
<asp:BoundField DataField="Note" HeaderText="Note" ></asp:BoundField>
</Columns>
</asp:GridView>
-Code hinter:
protected void gvCVRT_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
lookupCVRT work = (lookupCVRT)e.Row.DataItem;
GridView gv = sender as GridView;
if (work.ID != null)
{
int index = gv.Columns.HeaderIndex("Select");
if (index > -1)
{
e.Row.Cells[index].Attributes.Add("class", "gvCVRTRow");
e.Row.Cells[index].ToolTip = "Click here to Edit Checklist";
}
}
}
}
-Code für Auswahltaste:
protected void gridviewParent_SelectedIndexChanged(object sender, EventArgs e)
{
List<lookupCVRT> workDetails = lookupCVRT.GetChecklistItemsByChecklistID(Company.Current.CompanyID, ParentID.ToString(), gvCVRT.SelectedDataKey.Value.ToString());
gvCVRTDetails.DataSource = workDetails;
gvCVRTDetails.DataBind();
FireJavascriptCallback("setArgAndPostBack();");
}
Also das Problem ist, wenn ich auf die Schaltfläche Auswählen klicken in der Gitter es läuft die RowDataBound
zuerst dann die gridviewParent_SelectedIndexChanged
aber ich muss 012 laufenzuerst. Kann ich die RowDataBound
Funktion von gridviewParent_SelectedIndexChanged
aufrufen?
Page_Load Funktion:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GetChecklistID = "";
if (ParentID.HasValue)
{
ViewState["ParentID"] = ParentID;
List<lookupCVRT> work = lookupCVRT.GetCVRTItems(Company.Current.CompanyID, ParentID.ToString());
ViewState["CVRT"] = work;
gvCVRT.DataSource = work;
gvCVRT.DataBind();
}
}
else
{
if (ViewState["ParentID"] != null)
{
ParentID = (int?)ViewState["ParentID"];
List<lookupCVRT> work = ViewState["CVRT"] as List<lookupCVRT>;
gvCVRT.DataSource = work;
gvCVRT.DataBind();
}
}
}
Können Sie bitte Ihre Page_Load-Methode und alle anderen Methoden veröffentlichen, die einen Sturz zu DataBind() enthalten? – Markus
@Markus Seite_Load Code zu meiner Frage hinzufügen. Dies ist der einzige Ort, an dem DataBind aufgerufen wird. Wenn ich auf Select klicke, geht es in den 'else'-Teil der Methode – user123456789
danke; Ich denke, ich habe das Problem identifiziert; Bitte sehen Sie meine aktualisierte Antwort. – Markus