08. august 2008 - 13:43
#2
Hej
Jeg har forsøgt at kalde en funktion som du siger
if (keys.Contains("updatevisible"))
testigen();
, men uden held. Jeg tror det må være noget med postback, page_load, page_rerender osv. Men kan ikke gennemskue hvad der nøjagtigt er galt. Det er lidt svært at vise hvad der kan være galt uden at hælde en masse kode i hovedet på dig - jeg beklager, men ser ikke anden løsning til at få hjælp,
Det er funktionen:
protected void GridProducts_RowDataBound(object sender, GridViewRowEventArgs e)
at jeg ved tryk på række nr. 4:
e.Row.Cells[4].Attributes.Add("onClick","window.navigate('Products.aspx?updatevisible=true&visible="+!visible +"&ProductID="+productID+"')");
ønsker at der skal udføres noget, testigen()
here it goes...
public partial class Products : Web.UI.Page
{
private int count = 0;
private bool seekstring = false;
public string vendorname = "";
protected void Page_Prerender(object sender, EventArgs e)
{
ActionMenu.Visible = Authorization.User.Add;
SetFocus(TextBoxProducts);
byte visible = byte.Parse(DropDownVisible.SelectedValue);
if (Mode == Modes.Extra) // start condition
{
DropDownProductLine.Enabled = false;
TextBoxProducts.Text = ""; LabelResult.Visible = false;
GridProducts.Visible = false;
}
if (Mode == Modes.Extra2)
{
DropDownProductLine.Enabled = true;
DropDownFamily.Enabled = true;
}
} // end Page_Prerender()
protected void Page_Init(object sender, EventArgs e)
{
int productID = 0;
if (!IsPostBack)
{
FillDropDownVendor(1, 0);
FillDropDownProductLine(0);
FillDropDownProductFamily(true, 0);
Mode = Modes.Extra;
}
if (Request.QueryString.HasKeys())
{
ArrayList keys = new ArrayList();
foreach (string key in Request.QueryString.Keys)
keys.Add(key);
if (keys.Contains("Confirm"))
{
if (keys.Contains("ProductID"))
productID = int.Parse(Request.QueryString["ProductID"]);
bool delete = bool.Parse(Request.QueryString["Confirm"]);
if (delete)
{
Infostandard.Visible = true;
if (DeleteProduct(productID))
{
Infostandard.Text = "Produktet er blevet slettet";
}
else
{
Infostandard.Text = "Der opstod en fejl - Produktet er IKKE blevet slettet";
}
}
else
Page.Response.Redirect("Products.aspx");
}
}
} // end Page_Init()
protected void Page_Load(object sender, EventArgs e)
{
string menuName = Menus.GetMenuName(137);
// chech access
Menus.ValidateMenuAccess(134);
SetTitle(menuName);
LabelHeader.Text = menuName;
if (Request.QueryString.HasKeys())
{
ArrayList keys = new ArrayList();
foreach (string key in Request.QueryString.Keys)
keys.Add(key);
if (keys.Contains("updatevisible"))
{
testigen();
}
}
} // end Page_Load
private void FillDropDownVendor(byte visible, int productlineID)
{
DropDownVendor.Enabled = true;
DropDownVendor.Visible = true;
Logic.Vendors vendors = new ServicePartner.Logic.Vendors();
DataSet dataset = vendors.GetAllVendors(visible);
vendors = null;
DataView dataView = dataset.Tables[0].DefaultView;
DropDownVendor.DataSource = dataView;
count = dataView.Count;
DropDownVendor.DataTextField = "VendorName";
DropDownVendor.DataValueField = "VendorID";
dataView.Sort = "VendorName";
DropDownVendor.DataBind();
if (count < 1)
DropDownVendor.Enabled = false;
DropDownVendor.Items.Insert(0, new ListItem("Alle leverandører", "0"));
} // end void FillDropDownVendor(byte)
private void FillDropDownProductLine(short vendorID)
{
DropDownProductLine.Items.Clear();
Logic.ProductLines productlines = new ServicePartner.Logic.ProductLines();
DataSet dataset = productlines.GetProductLines(vendorID);
productlines = null;
DataView dataView = dataset.Tables[0].DefaultView;
DropDownProductLine.DataSource = dataView;
DropDownProductLine.DataTextField = "ProductLine";
DropDownProductLine.DataValueField = "ProductLineID";
dataView.Sort = "ProductLine";
DropDownProductLine.DataBind();
DropDownProductLine.Items.Insert(0, "Alle produktlinier");
} // end void FillDropDownProductLine(byte, int, int)
private void FillDropDownProductFamilyFromVendorID(short vendorid)
{
DropDownFamily.Items.Clear();
Logic.ProductFamilies productfamilies = new ServicePartner.Logic.ProductFamilies();
DataSet dataset = productfamilies.GetProductFamilyFromVendorid(vendorid);
productfamilies = null;
DataView dataView = dataset.Tables[0].DefaultView;
DropDownFamily.DataSource = dataView;
DropDownFamily.DataTextField = "ProductFamilyName";
DropDownFamily.DataValueField = "ProductFamilyID";
dataView.Sort = "ProductFamilyName";
DropDownFamily.DataBind();
DropDownFamily.Items.Insert(0, "Alle produktfamilier");
}
private void FillDropDownProductFamily(bool start, int productlineID)
{
DropDownFamily.Items.Clear();
DropDownFamily.Visible = true;
Logic.ProductFamilies productfamilies = new ServicePartner.Logic.ProductFamilies();
DataSet dataset = productfamilies.GetProductFamiliesFromProductLineID(productlineID);
// DataSet dataset = productfamilies.GetProductFamilyFromProducts(visible, productlineID, vendorID);
productfamilies = null;
DataView dataView = dataset.Tables[0].DefaultView;
DropDownFamily.DataSource = dataView;
DropDownFamily.DataTextField = "ProductFamilyName";
DropDownFamily.DataValueField = "ProductFamilyID";
dataView.Sort = "ProductFamilyName";
DropDownFamily.DataBind();
count = dataView.Count;
if (count < 1)
DropDownFamily.Enabled = false;
if (start)
DropDownFamily.Items.Insert(0, "Alle produktfamilier");
else
DropDownFamily.Items.Insert(0, "Alle produktfamilier");
} // end void FillDropDownProductFamily(byte, int, int)
protected void FillFromVisible(object sender, EventArgs e)
{
int selectedValueProductlineid = 0;
int selectedValueFamilyID = 0;
byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
if (DropDownProductLine.SelectedIndex != 0)
selectedValueProductlineid = int.Parse(DropDownProductLine.SelectedValue);
FillDropDownVendor(selectedValueVisible, selectedValueProductlineid);
}
protected void FillFromVendor(object sender, EventArgs e)
{
int selectedValueProductlineid = 0;
int selectedValueFamilyID = 0;
Mode = Modes.Extra2;
byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
if (DropDownProductLine.SelectedIndex != 0)
selectedValueProductlineid = int.Parse(DropDownProductLine.SelectedValue);
if (DropDownFamily.SelectedIndex != 0)
selectedValueFamilyID = int.Parse(DropDownFamily.SelectedValue);
short selectedValueVendorID = short.Parse(DropDownVendor.SelectedValue);
FillDropDownProductLine(selectedValueVendorID);
FillDropDownProductFamilyFromVendorID(selectedValueVendorID);
}
protected void FillFromProductLine(object sender, EventArgs e)
{
int selectedValueProductlineid = 0; int selectedValueFamilyID = 0;
byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
int selectedValueVendorID = int.Parse(DropDownVendor.SelectedValue);
if (DropDownProductLine.SelectedIndex > 0)
selectedValueProductlineid = int.Parse(DropDownProductLine.SelectedValue);
if (DropDownFamily.SelectedIndex != 0)
selectedValueFamilyID = int.Parse(DropDownFamily.SelectedValue);
FillDropDownProductFamily(false, selectedValueProductlineid);
}
protected void LinkButtonSearch_Click(object sender, EventArgs e)
{
int selectedproductlineid = 0; int selectedproductfamilyid = 0;
GridProducts.Visible = true; LabelResult.Visible = true;
byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
if (DropDownProductLine.SelectedIndex != 0)
selectedproductlineid = int.Parse(DropDownProductLine.SelectedValue);
if (DropDownFamily.SelectedIndex > 0)
selectedproductfamilyid = int.Parse(DropDownFamily.SelectedValue);
int selectedvendorid = int.Parse(DropDownVendor.SelectedValue);
string productSearch = TextBoxProducts.Text;
Infostandard.Visible = false;
if (productSearch == "")
seekstring = true;
else
seekstring = false;
if (selectedvendorid == 0)
vendorname = "ALL";
else
vendorname = DropDownVendor.SelectedItem.ToString();
FillDataGridProducts(productSearch, "ProductName", "ProductNameSort", "ASC", seekstring, selectedValueVisible, selectedvendorid, selectedproductlineid, selectedproductfamilyid);
}
protected void LinkButtonReset_Click(object sender, EventArgs e)
{
Mode = Modes.Extra;
DropDownVisible.SelectedValue = "1";
FillDropDownVendor(1, 0);
FillDropDownProductLine(0);
// bool start=true, int productlineid=0(ALL)
FillDropDownProductFamily(true, 0);
} // end LinkButtonReset_Click()
protected void GridViewProducts_Sorting(object sender, GridViewSortEventArgs e)
{
string sortProducts = TextBoxProducts.Text;
string sortVendor = DropDownVendor.SelectedItem.ToString();
int selectedproductlineid = 0; int selectedproductfamilyid = 0;
byte visible = byte.Parse(DropDownVisible.SelectedValue);
if (DropDownProductLine.SelectedIndex > 0)
selectedproductlineid = int.Parse(DropDownProductLine.SelectedValue);
if (DropDownFamily.SelectedIndex > 0)
selectedproductfamilyid = int.Parse(DropDownFamily.SelectedValue);
int vendorid = int.Parse(DropDownVendor.SelectedValue);
if (sortProducts == "")
seekstring = true;
else
seekstring = false;
if (DropDownVendor.SelectedIndex == 0) // All
sortVendor = "ALL";
if (DropDownVendor.SelectedIndex == (DropDownVendor.Items.Count - 1))
sortVendor = "NULL";
GridViewSortExpression = e.SortExpression;
GridViewSortDirection = GetSortDirection();
GridProducts.DataSource = SortDataTable(GridProducts.DataSource as DataTable);
GridProducts.DataBind();
FillDataGridProducts(sortProducts, "ProductNameSort", GridViewSortExpression, GridViewSortDirection,
seekstring, visible, vendorid, selectedproductlineid, selectedproductfamilyid);
} // end GridView
private void FillDataGridProducts(string filter, string sort, string sortexpression,
string sorttype, bool seekstring,
byte visible, int vendorID, int productlineID, int productfamilyID)
{
Logic.Products products = new ServicePartner.Logic.Products();
DataSet dataset = products.GetAllProductsFromSearch(visible, vendorID, productlineID, productfamilyID);
if (productfamilyID == 0 && productlineID > 0)
dataset = products.GetAllProductsWhereAllProductFamilySelected(visible, vendorID, productlineID, productfamilyID);
products = null;
DataView dataview = dataset.Tables[0].DefaultView;
if (!seekstring) // seek-criterium
dataview.RowFilter = "ProductName LIKE '%" + filter + "%'";
switch (sortexpression)
{
case "ProductNameSort":
dataview.Sort = "ProductName " + sorttype;
break;
case "VendorNameSort":
dataview.Sort = "VendorName " + sorttype;
break;
case "ProductFamilyNameSort":
dataview.Sort = "ProductFamilyName " + sorttype;
break;
case "ProductLineSort":
dataview.Sort = "ProductLine " + sorttype;
break;
default:
break;
}
GridProducts.DataSource = dataview;
GridProducts.DataBind();
ushort count = (ushort)dataview.Count;
FillResultStatus(count);
}
private void FillResultStatus(ushort rowCount)
{
switch (rowCount)
{
case 0:
LabelResult.Text = "Der blev ikke fundet nogle produkter med teksten <b>" + TextBoxProducts.Text + "</b>.";
break;
case 1:
LabelResult.Text = "Der blev fundet ét produkt.";
break;
default:
LabelResult.Text = "Der blev fundet " + rowCount + " produkter.";
break;
}
} // end void FillResultStatus(ushort)
protected void GridProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
bool visible = false;
Image visibleImage = new Image();
visibleImage.ImageUrl = "~/graphic/eye.jpg";
visibleImage.ToolTip = "Gør synlig";
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView dataRowView = (DataRowView)e.Row.DataItem;
visible = Convert.ToBoolean(dataRowView["Visible"]);
ushort productID = Convert.ToUInt16(dataRowView["ProductID"]);
CheckBox checkBoxMark = (CheckBox)e.Row.FindControl("CheckBoxVisible");
if (visible)
{
visibleImage.ImageUrl = "~/graphic/eye.jpg";
visibleImage.ToolTip = "Gør usynlig";
//checkBoxMark.Checked = true;
//checkBoxMark.ToolTip = "Gør usynlig";
}
else
{
visibleImage.ImageUrl = "~/graphic/eye_light.jpg";
visibleImage.ToolTip = "Gør synlig";
//checkBoxMark.Checked = false;
//checkBoxMark.ToolTip = "Synliggør";
}
e.Row.Cells[4].Controls.Add(visibleImage);
e.Row.Cells[4].Attributes.Add("onClick","window.navigate('Products.aspx?updatevisible=true&visible="+!visible +"&ProductID="+productID+"')");
e.Row.Attributes.Add("style", "cursor:hand");
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Silver'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = 'White'");
e.Row.Cells[0].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
e.Row.Cells[1].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
e.Row.Cells[2].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
e.Row.Cells[3].Attributes.Add("onClick", "window.navigate('Product.aspx?ProductID=" + productID + "')");
}
} // end GridProducts_RowDataBound()
private string GetSortDirection()
{
switch (GridViewSortDirection)
{
case "ASC":
GridViewSortDirection = "DESC";
break;
case "DESC":
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
} // end string GetSortDirection()
private string GridViewSortDirection
{
get { return ViewState["SortDirection"] as string ?? "ASC"; }
set { ViewState["SortDirection"] = value; }
} // end string GridViewSortDirection
private string GridViewSortExpression
{
get { return ViewState["SortExpression"] as string ?? string.Empty; }
set { ViewState["SortExpression"] = value; }
} // end string GridViewSortExpression
protected DataView SortDataTable(DataTable dataTable)
{
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
if (GridViewSortExpression != string.Empty)
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GetSortDirection());
}
return dataView;
}
else
{
return new DataView();
}
}
private bool DeleteProduct(int productID)
{
Logic.Products products = new ServicePartner.Logic.Products();
bool success = products.DeleteProducts(productID);
products = null;
return success;
} // end DeleteProduct(int)
public void testigen()
{
int selectedproductlineid = 0; int selectedproductfamilyid = 0;
GridProducts.Visible = true; LabelResult.Visible = true;
byte selectedValueVisible = byte.Parse(DropDownVisible.SelectedValue);
if (DropDownProductLine.SelectedIndex != 0)
selectedproductlineid = int.Parse(DropDownProductLine.SelectedValue);
if (DropDownFamily.SelectedIndex > 0)
selectedproductfamilyid = int.Parse(DropDownFamily.SelectedValue);
int selectedvendorid = int.Parse(DropDownVendor.SelectedValue);
string productSearch = TextBoxProducts.Text;
Infostandard.Visible = false;
if (productSearch == "")
seekstring = true;
else
seekstring = false;
if (selectedvendorid == 0)
vendorname = "ALL";
else
vendorname = DropDownVendor.SelectedItem.ToString();
FillDataGridProducts("", "ProductName", "ProductNameSort", "ASC", true,
2, 20, 0, 0);
}
}
}
}
09. august 2008 - 13:18
#4
Jeg forstår heller ikke hvorfor jeg ikke bare kan lægge koden ind i en funktion.
Jeg bruger:
keys.Contains("updatevisible") for at se om brugeren har ønsket en ændring af Visible. Det ønsker han når han trykker her: e.Row.Cells[4].Attributes.Add("onClick","window.navigate('Products.aspx?updatevisible=true&visible="+!visible +"&ProductID="+productID+"')");
Meningen er så at jeg skal opdatere databasen ved hvert tryk og returnere et opdateret gridview til ham. Når jeg skal hente indholdet af html-strengen, vil jeg (i en funktion) bruge din foreslåede konstruktion:
bool visible = Request.QueryString["updatevisible"]
men mit store problem er at returnere det updaterede gridview, som i al sin enkelthed burde kunne klares ved at køre funktionenen sidst i min kode public void testigen(), hvor FillDataGridProducts("", "ProductName", "ProductNameSort", "ASC", true,
2, 20, 0, 0); er et eksempel på "hardcoded" parametre.
Jeg har sat pointene op, så håber jeg måske, der er en som kan tage sig tid til at gennemskue problemet ;)