Cascading dropdown with Ajax - c#

I am new to Ajax. I am implementing a cascading dropdown in a telerik RadGrid.
I am adding the dropdownList and CascadingDropDown as follows:
DropDownList droplist = new DropDownList();
droplist.ID = "DropDownListOrderTask";
droplist.AutoPostBack = true;
item["OrderTask"].Controls.Add(droplist);
CascadingDropDown ccdOrderTask = new CascadingDropDown();
ccdOrderTask.ID = "ccdOrderTask";
ccdOrderTask.Category = "OrderTask";
ccdOrderTask.TargetControlID = "DropDownListOrderTask";
ccdOrderTask.PromptText = "Select Order Task";
ccdOrderTask.LoadingText = "Loading OrderTask";
ccdOrderTask.ServiceMethod = "BindOrderTask";
ccdOrderTask.ServicePath = "ajaxservice.asmx";
TextBox txt = (TextBox)item["TaskOwner"].Controls[0];
txt.Visible = false;
droplist = new DropDownList();
droplist.ID = "DropDownListTaskOwner";
item["TaskOwner"].Controls.Add(droplist);
CascadingDropDown ccdTaskOwner = new CascadingDropDown();
ccdTaskOwner.ID = "ccdTaskOwner";
ccdTaskOwner.Category = "TaskOwner";
ccdTaskOwner.ParentControlID = "DropDownListOrderTask";
ccdTaskOwner.TargetControlID = "DropDownListTaskOwner";
ccdTaskOwner.PromptText = "Select Task Owner";
ccdTaskOwner.LoadingText = "Loading Task Owner";
ccdTaskOwner.ServiceMethod = "BindTaskOwner";
ccdTaskOwner.ServicePath = "ajaxservice.asmx";
On the PreRender I have the following:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
var ajaxManager = RadAjaxManager.GetCurrent(Page);
if(ajaxManager != null)
ajaxManager.AjaxSettings.AddAjaxSetting(this._UpdatePanel, this._RadGrid1, this._RadLoadingPanel);
}
In the ajaxservice.asmx I have the following:
[WebMethod]
public CascadingDropDownNameValue[] BindOrderTask(string knownCategoryValues, string category)
{
OrderRequestTaskTypeTable _orderRequestTaskTypeTable = new OrderRequestTaskType_List().ExecuteTypedDataTable();
List<CascadingDropDownNameValue> orderTaskDetails = new List<CascadingDropDownNameValue>();
foreach(DataRow dtRow in _orderRequestTaskTypeTable.Rows)
{
String orderTaskId = dtRow["OrderRequestTaskTypeId"].ToString();
String orderTaskName = dtRow["DescriptionTaskType"].ToString();
orderTaskDetails.Add(new CascadingDropDownNameValue(orderTaskId, orderTaskName));
}
return orderTaskDetails.ToArray();
}
The first dropDown, DropDownListOrderTask contains no values. On debugging through Firebug it says: ReferenceError: BindOrderTask is not defined
I am sure I am missing something but not sure what. Please help me.

Related

Cardview Columns using Devexpress

created a few seconds ago
Hi,
I am creating a web page in asp.net based on data from a database. This should result in a number of tab pages with card views on each tab with 5 columns and a maximum of 20 rows. The tab pages are working, the rows are working but the columns will not change from the default 3 columns.
I have tried setting the columnCount property at different stages, post and pre databinding. This getting frustrating.
I am having problems with setting a card views column count programmatically. I am setting it, have tried to set it in different places but it always goes to the default 3 columns :(
I am using C# in Visual studio 2017.
Here is the code I am using:
SqlDataSource sds = new SqlDataSource();
public string fName;
protected void Page_Load(object sender, EventArgs e)
{
string fid = Request.QueryString["FID"];
sds.ConnectionString = ConfigurationManager.ConnectionStrings["DataBaseConnection"].ToString();
sds.SelectCommand = "select name from [flashboard] where flashboardid = " + fid;
DataView fDet = (DataView)sds.Select(DataSourceSelectArguments.Empty);
fName = fDet.Table.Rows[0]["name"].ToString();
TitleLink.InnerHtml = fName;
sds.SelectCommand = "SELECT flashboardtabid, name FROM [FlashboardTab] WHERE flashboardid = " + fid+" order by SeqNo";
DataView fTab = (DataView)sds.Select(DataSourceSelectArguments.Empty);
TabPage tabDet;
ASPxPageControl tpc = ASPxPageControl1;
ASPxCardView cardGrp;
CardViewTextColumn cName;
CardViewHyperLinkColumn cEvidence;
foreach (DataRow tab in fTab.Table.Rows)
{
tabDet = new TabPage();
tabDet.Text = tab["name"].ToString();
tabDet.Name = "Tab"+tab["flashboardtabid"].ToString();
tabDet.ActiveTabStyle.Width = Unit.Percentage( 80);
cardGrp = new ASPxCardView();
cardGrp.ID = "CardGroup" + tab["flashboardtabid"].ToString() ;
tabDet.Controls.Add(cardGrp);
tpc.TabPages.Add(tabDet);
cardGrp.AutoGenerateColumns = false;
ASPxCardViewPagerSettings cvps = new ASPxCardViewPagerSettings(cardGrp);
cardGrp.EnableTheming = true;
cardGrp.Theme = "SoftOrange";
cvps.Visible = false;
cvps.SettingsTableLayout.ColumnCount = 5;
cvps.SettingsTableLayout.RowsPerPage = 20;
cardGrp.DataSource = GetData("SELECT cardid, Description, EvidencePage, SmartViewid FROM [flashboardcard] WHERE flashboardtabid = "+tab["flashboardtabid"] + " order by SeqNo");
cardGrp.Attributes.Add("Width", "80%");
cardGrp.Attributes.Add("style", "margin:auto");
cName = new CardViewTextColumn();
cName.Name = "Description";
cName.FieldName = "Description";
cEvidence = new CardViewHyperLinkColumn();
cEvidence.Name = "EvidencePage";
cEvidence.FieldName = "EvidencePage";
cEvidence.PropertiesHyperLinkEdit.Text = "Evidence";
cardGrp.Columns.Add(cName);
cardGrp.Columns.Add(cEvidence);
var layoutitem1 = new CardViewColumnLayoutItem(); // cardGrp.CardLayoutProperties.FindColumnItem("EvidencePage");
layoutitem1.ColumnName = "EvidencePage";
layoutitem1.ShowCaption = DevExpress.Utils.DefaultBoolean.False;
layoutitem1.HorizontalAlign = FormLayoutHorizontalAlign.Center;
var layoutitem2 = new CardViewColumnLayoutItem();
layoutitem2.ColumnName = "Description";
layoutitem2.ShowCaption = DevExpress.Utils.DefaultBoolean.False;
layoutitem2.HorizontalAlign = FormLayoutHorizontalAlign.Center;
layoutitem2.ParentContainerStyle.Font.Bold = true;
layoutitem2.ParentContainerStyle.Font.Size = FontUnit.Medium;
cardGrp.CardLayoutProperties.Items.Add(layoutitem2);
cardGrp.CardLayoutProperties.Items.Add(layoutitem1);
cardGrp.DataBind();
}
}
DataView GetData(String queryString)
{
DataView ds = new DataView();
sds.SelectCommand = queryString;
ds = (DataView)sds.Select(DataSourceSelectArguments.Empty);
return ds;
}
To resolve this issue with ColumnCount, I recommend you define it directly in the control's SettingsPager.SettingsTableLayout.ColumnCount property instead of specifying it in a new ASPxCardViewPagerSettings instance:
cardGrp.SettingsPager.SettingsTableLayout.ColumnCount = 5;
cardGrp.SettingsPager.SettingsTableLayout.RowsPerPage = 20;

Pass value from boundfield of gridview to controller

I have 2 gridview look like this:
and 2 controller for those gridview:
Gridview Controller 1:
[DataObjectMethod(DataObjectMethodType.Select, false)]
public List<OutstandingOrderInfo> OrderInfo()
{
using (var context = new eToolsContext())
{
var data2 = from po in context.PurchaseOrders
where !po.Closed
select new OutstandingOrderInfo()
{
Order = po.PurchaseOrderID,
Date = po.OrderDate,
VendorName = po.Vendor.VendorName,
ContactPhone = po.Vendor.Phone
};
return data2.ToList();
}
}
GridView2 Controller
[DataObjectMethod(DataObjectMethodType.Select,false)]
public OrderDetail GetOrderDetail (int purchaseOrderID)
{
using (var context = new eToolsContext())
{
var data = from pod in context.PurchaseOrderDetails
where pod.PurchaseOrderID == purchaseOrderID
select new OrderDetail()
{
StockItemID = pod.StockItemID,
Description = pod.StockItem.Description,
QuantityOnOrder = pod.StockItem.QuantityOnOrder,
};
return data.FirstOrDefault();
}
}
I'm trying to pass the value of Order boundfield in Gridview1 to controller of Gridview 2 as the parameter whenever the ViewOrder link button is clicked.
But I received the error that the data I passed is null. What am I doing wrong?
Here is my code for handling the click event:
protected void GridView1_SelectedIndexChanged(object sender, GridViewSelectEventArgs e)
{
e.Cancel = true; // to prevent any other processing in the GridView's default Select handling
GridView sendingGridView = sender as GridView; // notice the safe casting
GridViewRow row = sendingGridView.Rows[e.NewSelectedIndex];
var orderID = row.FindControl("Order") as Label;
int puchaseOrderID = int.Parse(orderID.Text);
GetOrderDetail(puchaseOrderID);
}
private void GetOrderDetail(int purchaseOrderID)
{
var controller = new ReceivingController();
var data = controller.GetOrderDetail(purchaseOrderID);
GridView2.DataSource = data.OrderDetail;
GridView2.DataBind();
}

DevExpress Lookupedit Set Selected Value

I have following Grid where it populates InquiryDetails in the Win Form Load event
private void frmInquiryManagement_Load(object sender, EventArgs e)
{
InquiryService inquiry = new InquiryService();
clearGetInquiry();
DataTable dt = InfoPCMS.db.executeSelectQuery("select * from Inquiry");
gridInquiryList.DataSource = dt;
DataTable dt2 = InfoPCMS.db.executeSelectQuery("select * from Customer");
txtCustomer.Properties.DataSource = dt2;
txtCustomer.Properties.ValueMember = "Id";
txtCustomer.Properties.DisplayMember = "CustomerName";
txtCustomer.Properties.NullText = "Please Select Customer";
txtCustomer.Properties.Columns.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("CustomerName"));
txtCustomer.Properties.Columns.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Address"));
txtCustomer.Properties.ShowHeader = false;
int nextid = inquiry.getNextId();
txtInquiryNo.Text = nextid.ToString();
}
By double clicking on a row, it searches for all the details and displays in "Get Inquiries" Tab as follows, code of that is below the image
private void selectInquiry(object sender, EventArgs e)
{
btnAddInquiry.Enabled = false;
btnUpdate.Enabled = true;
txtInquiryNo.Enabled = false;
String inquiryno = gridView1.GetFocusedDataRow()["InquiryNumber"].ToString();
InquiryService inquiry = new InquiryService();
inquiry = inquiry.searchInquiry(inquiryno);
if (inquiry != null)
{
txtInquiryNo.Text = inquiry.InquiryNumber.ToString();
//txtDate.Text = inquiry.InquiryDate;
txtDate.Text = InfoPCMS.conversion.convertDate(inquiry.InquiryDate);
txtCustomer.EditValue = inquiry.CustomerID.ToString();
txtInquiryTaken.Text = inquiry.InquiryTaken;
txtInspectionDetails.Text = inquiry.InspectionDetails;
txtProblemNature.Text = inquiry.ProblemNature;
txtProblemSource.Text = inquiry.ProblemSource;
txtSiteResponsible.Text = inquiry.SiteResponsible;
txtQuotationNo.Text = inquiry.QuotationNumber.ToString();
txtFollowupDetails.Text = inquiry.FollowupDetails;
txtInspectionDone.Text = inquiry.InspectionDone;
tabInquiryManagement.SelectedTabPage = xtraTabPage2;
}
else
{
MessageBox.Show(InfoPCMS.message.GET_NO_SUCH_RECORD_INFORMATION(), "Information");
}
}
First time you search it works fine, But after when you clear all the fields and the page and try another record it will give all the records but the Lookupedit value to its null state as follows,
private void clearGetInquiry() {
txtInquiryNo.Text = "";
txtDate.Text = "";
txtCustomer.EditValue = null;
txtInquiryTaken.Text = "";
txtInspectionDetails.Text = "";
txtProblemNature.Text = "";
txtProblemSource.Text = "";
txtSiteResponsible.Text = "";
txtQuotationNo.Text = "";
txtFollowupDetails.Text = "";
txtInspectionDone.Text = "";
btnAddInquiry.Text = "Add Inquiry";
InquiryService inquiry = new InquiryService();
int nextid = inquiry.getNextId();
txtInquiryNo.Text = nextid.ToString();
tabInquiryManagement.SelectedTabPage = xtraTabPage1;
btnAddInquiry.Enabled = true;
btnUpdate.Enabled = false;
txtInquiryNo.Enabled = true;
}
How can I get rid of this issue? (This happens even when you do the search after going into the "Get Inquiries" Tab and come.

Dynamic Report building Refresh() is not changing data

I am trying to View a report dynamically from code behind. But when the parameters are changed from dynamic textboxes added in the page. in the report refresh() the data is not changed.
I call sqlDS() and reportBuild() in the !IsPostback.
This method is for defining the sqlDatasource:
protected void sqlDS()
{
string conString, prName = "";
int counter = 0;
Reporting rep = new Reporting();
rep = rep.searchReport(repID_HF.Value);
Reporting repFold = new Reporting();
repFold = repFold.searchFolder(foldID_HF.Value);
if (repFold.FolderName.Split('(')[1] == "Web Reports)")
{
conString = dbSql.connectionStringAll;
prName = dbSql.providerName;
}
else
{
conString = db.connectionStringAll;
prName = db.providerName;
}
SqlDataSource1.ConnectionString = conString;
SqlDataSource1.ProviderName = prName;
string sqlString = System.IO.File.ReadAllText(Server.MapPath("~/Reports/SQLs/" + rep.SqlFile));
sqlString.Replace(System.Environment.NewLine, " ");
SqlDataSource1.SelectCommand = sqlString;
SqlDataSource1.CancelSelectOnNullParameter = false;
Reporting repParam = new Reporting();
allPs = repParam.getAllParamRep(rep.RepID);
foreach (Reporting itemParam in allPs)
{
if (itemParam.ParamType == "Date")
{
SqlDataSource1.SelectParameters.Add(":" + itemParam.ParamName, itemParam.ParamDefaultValue);
counter++;
}
else if (itemParam.ParamType == "Text")
{
SqlDataSource1.SelectParameters.Add(":" + itemParam.ParamName, itemParam.ParamDefaultValue);
counter++;
}
else if (itemParam.ParamType == "Menu")
{
counter++;
}
}
}
This method is for declaring the report properties:
protected void reportBuild()
{
Reporting rep2 = new Reporting();
rep2 = rep2.searchReport(repID_HF.Value);
ReportViewer1.LocalReport.ReportPath = "Reports/RDLC/" + rep2.RdlcFile;
this.ReportViewer1.LocalReport.ReportEmbeddedResource = rep2.RdlcFile;
ReportParameter[] paramss = new ReportParameter[SqlDataSource1.SelectParameters.Count];
for (int i = 0; i < SqlDataSource1.SelectParameters.Count; i++)
{
paramss[i] = new ReportParameter(SqlDataSource1.SelectParameters[i].Name.Split(':')[1], SqlDataSource1.SelectParameters[i].DefaultValue);
}
ReportDataSource rds = new ReportDataSource(rep2.DatasetName.Split('.')[0], SqlDataSource1);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
//paramss[0] = new ReportParameter("TDATE", SqlDataSource1.SelectParameters[0].DefaultValue);
//paramss[1] = new ReportParameter("CUST_NUM", SqlDataSource1.SelectParameters[1].DefaultValue);
ReportViewer1.LocalReport.SetParameters(paramss);
ReportViewer1.LocalReport.Refresh();
}
In the reportViewer refresh method i try to set the new parameters according to the dynamic textboxes added in the page:
protected void ReportViewer1_ReportRefresh(object sender, System.ComponentModel.CancelEventArgs e)
{
foreach (Control txt in Panel1.Controls)
{
if (txt is TextBox)
{
txts.Add(txt);
}
}
foreach (TextBox txtbox in txts)
{
Reporting repP = new Reporting();
repP = repP.searchParam(txtbox.Attributes["pID"].ToString());
if (repP.ParamType == "Date")
{
SqlDataSource1.SelectParameters[":" + repP.ParamName].DefaultValue = txtbox.Text;
}
else if (repP.ParamType == "Text")
{
SqlDataSource1.SelectParameters[":" + repP.ParamName].DefaultValue = txtbox.Text;
}
}
//Reporting r = new Reporting();
//r = r.searchReport(repID_HF.Value);
//Reporting rep = new Reporting();
//rep = rep.searchReport(repID_HF.Value);
//ReportDataSource rds = new ReportDataSource(rep.DatasetName.Split('.')[0], SqlDataSource1);
//this.ReportViewer1.Reset();
//ReportViewer1.LocalReport.DataSources.Clear();
//ReportViewer1.LocalReport.DataSources.Add(rds);
ReportParameterInfoCollection x = ReportViewer1.LocalReport.GetParameters();
//Response.Redirect(Request.RawUrl);
ReportViewer1.LocalReport.Refresh();
}
I tried debugging and found every thing is working correctly the SQL parameters changed, the Report Parameters also is changed.
so why the data in the report is not changed? Plz help me
I got a better and easier way to solve this problem using this link
http://www.igregor.net/post/2007/12/Adding-Controls-to-an-ASPNET-form-Dynamically.aspx
And you can use array of strings to pass attributes.

how to set the navigationUrl of a hyperlinkField in SPGridView

I am trying to get all site-collections under the root site and display them using SPGridView. In the SPGridView I am using HyperlinkField to display the name, url and created for each site.
My problem is that I cannot attach the url of the site to HyperlinkField. Any idea how this can be done in code?
[ToolboxItemAttribute(false)]
public class SPGridViewDemo : WebPart
{
private SPGridView grid;
private ObjectDataSource gridDS;
public DataTable SelectData()
{
DataTable dataSource = new DataTable();
dataSource.Columns.Add("Name");
dataSource.Columns.Add("Created");
dataSource.Columns.Add("Url");
SPWebApplication webApplication = SPContext.Current.Site.WebApplication;
SPSiteCollection siteCollections = webApplication.Sites;
SPSite currentSite = SPContext.Current.Site;
foreach (SPSite siteCollection in siteCollections)
{
dataSource.Rows.Add(siteCollection.RootWeb.Title, siteCollection.RootWeb.Created, siteCollection.RootWeb.Url);
}
return dataSource;
}
protected sealed override void Render(HtmlTextWriter writer)
{
BoundField column = new BoundField();
HyperLinkField hyplink = new HyperLinkField();
hyplink.DataTextField = "Name";
hyplink.NavigateUrl = "Url";
hyplink.SortExpression = "Name";
hyplink.HeaderText = "Workspaces";
grid.Columns.Add(hyplink);
column = new BoundField();
column.DataField = "Created";
column.SortExpression = "Created";
column.HeaderText = "Created";
grid.Columns.Add(column);
column = new BoundField();
column.DataField = "Url";
column.SortExpression = "Url";
column.HeaderText = "Url";
grid.Columns.Add(column);
grid.Sort("Name",System.Web.UI.WebControls.SortDirection.Descending);
grid.DataBind();
base.Render(writer);
}
protected sealed override void CreateChildControls()
{
const string gridId = "grid";
const string dataSourceId = "gridDS";
gridDS = new ObjectDataSource();
gridDS.ID = dataSourceId;
gridDS.SelectMethod = "SelectData";
gridDS.TypeName = this.GetType().AssemblyQualifiedName;
gridDS.ObjectCreating += new ObjectDataSourceObjectEventHandler(gridDS_ObjectCreating);
this.Controls.Add(gridDS);
grid = new SPGridView();
grid.ID = gridId;
grid.DataSourceID = gridDS.ID;
grid.AutoGenerateColumns = false;
// Paging
grid.AllowPaging = true;
grid.PageSize = 5;
// Sorting
grid.AllowSorting = true;
this.Controls.Add(grid);
SPGridViewPager pager = new SPGridViewPager();
pager.GridViewId = grid.ID;
this.Controls.Add(pager);
}
private void gridDS_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = this;
}
You should use the HyperLinkField.DataNavigateUrlFields Property instead:
HyperLinkField hyplink = new HyperLinkField();
hyplink.DataTextField = "Name";
hyplink.DataNavigateUrlFields = new string[] { "Url" };
hyplink.SortExpression = "Name";
hyplink.HeaderText = "Workspaces";
grid.Columns.Add(hyplink);
The HyperLinkField.NavigateUrl Property is used to render static urls:
Use the NavigateUrl property to specify the URL to navigate to when a hyperlink in a HyperLinkField object is clicked. When this property is set, each hyperlink shares the same navigation URL.

Categories