Hallo Andr��e, hallo Alex,
das mit dem Code hatte ich schon bef�rchtet - ich hoffe, ich habe alles einigerma�en
zusammen bekommen:
private void Page_Load(object sender, System.EventArgs e)
{
// Hier Benutzercode zur Seiteninitialisierung einf�gen
// Disable caching in browser
Response.Expires = -1;
Response.ExpiresAbsolute = DateTime.Now.AddHours(-1);
Response.AddHeader("cache-control", "private");
Response.AddHeader("pragma", "no-cache");
// datagrid vars
if(ViewState["CurrentPageIndex"] != null)
dg.CurrentPageIndex = (int)
ViewState["CurrentPageIndex"];
// First loading
if(!Page.IsPostBack)
{
// At first we have to search
lblHeader.Text = "Suchen";
lblMessage.Text = "Bitte geben Sie die Zeichenfolge
ein, nach der gesucht werden soll:";
SetDdlShowBy();
SetMenu("search");
SetLabelText();
SetButtonText();
SetDdlLAPRefId();
SetDdlParentId();
pnlRow.Visible = false;
}
if(Session["DataSet"] != null)
{
dataSet11 = (DM.LAP.Manage.DataSet1)
Session["DataSet"];
// Create the datagrid (always, because it's not in
viewstate)
CheckNextStep();
//SetDataGrid();
//BindDataGrid();
}
private void SetDataGrid()
{
// Array to set the columns
// 0 = Name in header
// 1 = Name of column in dataset
string[,] arr = new string[3,2];
arr[0,0] = "Az.";
arr[0,1] = "Id";
arr[1,0] = "Bezeichnung";
arr[1,1] = "Name";
arr[2,0] = "Beschreibung";
arr[2,1] = "Description";
// Create DataGrid
dg.EnableViewState = false;
dg.AutoGenerateColumns = false;
dg.AllowPaging = true;
dg.PageSize = pageSize;
dg.AllowSorting = true;
dg.DataKeyField = "Oid";
// Make the boundcolumns
BoundColumn col;
for(int i=0; i < (arr.GetLength(0)); i++)
{
col = new BoundColumn();
col.HeaderText = arr[i,0];
col.DataField = arr[i,1];
col.SortExpression = col.DataField;
dg.Columns.Add(col);
}
// Add Administrationcolumns
TemplateColumn tplCol;
// Add ShowColumn
tplCol = new TemplateColumn();
tplCol.ItemTemplate =
this.LoadTemplate(Request.ApplicationPath + "/usercontrol/show.ascx");
dg.Columns.Add(tplCol);
// Add EditColumn
tplCol = new TemplateColumn();
tplCol.ItemTemplate =
this.LoadTemplate(Request.ApplicationPath + "/usercontrol/edit.ascx");
dg.Columns.Add(tplCol);
// Add DeleteColumn
tplCol = new TemplateColumn();
tplCol.ItemTemplate =
this.LoadTemplate(Request.ApplicationPath + "/usercontrol/delete.ascx");
dg.Columns.Add(tplCol);
//Style DataGrid
dg.HorizontalAlign = HorizontalAlign.Center;
dg.CellPadding = 5;
dg.GridLines = GridLines.Both;
dg.HeaderStyle.BackColor = Color.Gray;
dg.HeaderStyle.ForeColor = Color.White;
dg.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
dg.AlternatingItemStyle.BackColor = Color.WhiteSmoke;
}
private void BindDataGrid()
{
DataView dv = new DataView();
dv.Table = dataSet11.Tables[tableName];
if(ViewState["SortExpression"] != null)
dv.Sort = ViewState["SortExpression"].ToString();
else
dv.Sort = "Id";
if(dv.Table.Rows.Count <= pageSize)
dg.AllowPaging = false;
dg.DataSource = dv;
dg.DataBind();
}
private void CheckNextStep()
{
// How many rows are there?
if(dataSet11.Tables[tableName].Rows.Count < 1) // No Row
{
lblMessage.Text = "Es ist noch kein Datensatz
vorhanden. Bitte erfassen Sie jetzt einen neuen.";
DoNew();
}
if(dataSet11.Tables[tableName].Rows.Count == 1) // Only one row
{
Session[rowOid] = (Guid)
dataSet11.Tables[tableName].Rows[0]["oid"];
DoShow();
}
if(dataSet11.Tables[tableName].Rows.Count > 1) // More than
one row
{
DoList();
}
}
private void DoList()
{
lblHeader.Text = objectName + " auflisten";
lblMessage.Text = "Es sind " +
dataSet11.Tables[tableName].Rows.Count + " Datens�tze vorhanden.";
SetDataGrid();
BindDataGrid();
pnlList.Visible = true;
pnlRow.Visible = !pnlList.Visible;
SetMenu("list");
}
private void DoShow()
{
// Fill Header
lblHeader.Text = objectName + " zeigen";
lblMessage.Text = "";
// Fill Textfields
SetTextBoxText(true);
// Controls visible
SetControlsVisibleByMode("show");
SetButtonUnvisible();
pnlList.Visible = false;
pnlRow.Visible = !pnlList.Visible;
SetMenu("detail");
}
private void btnSearch_Click(object sender, System.EventArgs e)
{
if(txtSearch.Text.Trim() != string.Empty)
{
// Set Search-String
string search = "%" + txtSearch.Text.Trim() + "%";
cmdCountBySearch.Parameters["@Search"].Value = search;
// Set Owner
string owner = string.Empty;
switch (ddlShowBy.SelectedValue)
{
case "all":
owner = "27608%";
break;
case "orglap":
owner = Session["OrgId"].ToString();
break;
case "lap":
owner = "27608";
break;
}
cmdCountBySearch.Parameters["@Owner"].Value = owner;
sqlConnection1.Open();
object result = cmdCountBySearch.ExecuteScalar();
sqlConnection1.Close();
int num = 0;
if(result != null)
num = (int) result;
if(num > 0)
{
sqlSelectCommand1.Parameters["@Search"].Value
= search;
sqlSelectCommand1.Parameters["@Owner"].Value =
owner;
dataSet11.Tables[tableName].Clear();
sqlDataAdapter1.Fill(dataSet11,tableName);
// Save the DataSet
Session["DataSet"] = dataSet11;
CheckNextStep();
}
else
{
lblMessage.Text = "Mit dem Suchkriterium " +
txtSearch.Text.Trim() + " konnte kein Datensatz gefunden werden!";
if(pnlList.Visible == true)
pnlList.Visible = false;
}
}
else
Server.Transfer(Request.RawUrl);
}
@Andre: Wenn ich das DataGrid (weil nicht in ViewState) nicht neu erzeuge, werden die
Funktionen der Klicks nicht ausgef�hrt.
Henri
[EMAIL PROTECTED] schrieb am 28.04.04 08:59:29:
>
> Das DataGrid musst du nie neu erzeugen.
> Du musst bei einer suche nur deine DataView anpassen und diese als DataSource
> deinem DataGrid zuordnen. Danach noch DataBind aufrufen und das DataGrid enth�lt die
> neuen Daten.
>
> Andr�
>
> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von "Henri L�bel"
> Gesendet: Mittwoch, 28. April 2004 08:55
> An: [EMAIL PROTECTED]
> Betreff: [Asp.net] Doppelte Ausgabe Datagrid vermeiden
>
> Hallo,
>
> in einer aspx-Seite habe ich einen Suchbutton.
>
> Wenn die Suche zu einer Ergebnismenge f�hrt, zeige ich dieses in einem Datagrid an.
> Jede Zeile des Datagrid enth�lt eine Schaltfl�che, um die Daten im Einzelsatz
> anzuzeigen.
>
> Das DataGrid beruht auf einer DataView. Diese DataView h�ngt von der Suche ab.
>
> Jetzt passiert es, dass nach Anzeigen des DataGrid und einer erneuten Suche das
> DataGrid doppelt angezeigt wird, beides mit dem gleichen Inhalt.
>
> Im PageLoad wird das DataGrid erstellt, da es nicht im ViewState ist und ich ggf.
> auf das Klicken auf den Detailbutton reagieren muss.
>
> Das DataGrid wird aber ebenfalls beim Klick auf den Suchen-Button erzeugt.
>
> Hier ist meines Erachtens der Ansatz zu suchen. Allerdings wei� ich nicht, worauf
> ich reagieren soll. Beim Klicken auf den Suchbutton muss das Datagrid ja erzeugt und
> gef�llt werden. Bevor ich das Ereignis "Klick auf Detailbutton" ausl�se, muss ich
> das Datagrid ja ebenfalls haben, damit ich wei�, zu welchem Datensatz die Details
> angezeigt werden sollen. Anschlie�end k�nnte ich eigentlich das DataGrid zerst�ren -
> aber eine Dispose f�hrt ja leider nicht (zum gew�nschten Zeitpunkt) dazu.
>
> Ist vielleicht irgendwas in meiner Logik faul?
>
> Henri
> _____________________________________________________________________
> Der WEB.DE Virenschutz schuetzt Ihr Postfach vor dem Wurm Netsky.A-P!
> Kostenfrei fuer alle FreeMail Nutzer. http://f.web.de/?mc=021157
>
> *************************
> _______________________________________________
> This ASP.NET email is sponsored by:
> UDEX ProMenu.Net - Die Software f�r Navigation - Jetzt kostenlos testen!
> Tree- Style, Horizontal- Slide, Vertical- Slide. http://www.udexnet.com
>
> _______________________________________________
> Asp.net Mailingliste, Postings senden an:
> [EMAIL PROTECTED]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/asp.net
> *************************
> *************************
> _______________________________________________
> This ASP.NET email is sponsored by:
> UDEX ProMenu.Net - Die Software f�r Navigation - Jetzt kostenlos testen!
> Tree- Style, Horizontal- Slide, Vertical- Slide. http://www.udexnet.com
>
> _______________________________________________
> Asp.net Mailingliste, Postings senden an:
> [EMAIL PROTECTED]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/asp.net
> *************************
_____________________________________________________________________
Der WEB.DE Virenschutz schuetzt Ihr Postfach vor dem Wurm Netsky.A-P!
Kostenfrei fuer alle FreeMail Nutzer. http://f.web.de/?mc=021157
*************************
_______________________________________________
This ASP.NET email is sponsored by:
UDEX ProMenu.Net - Die Software f�r Navigation - Jetzt kostenlos testen!
Tree- Style, Horizontal- Slide, Vertical- Slide. http://www.udexnet.com
_______________________________________________
Asp.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net
*************************