コード例 #1
0
        protected string GenerateSavedSearch(bool bDefaultSearch)
        {
            XmlDocument xml = new XmlDocument();

            xml.AppendChild(xml.CreateXmlDeclaration("1.0", "UTF-8", null));
            XmlNode xSavedSearch = xml.CreateElement("SavedSearch");

            xml.AppendChild(xSavedSearch);
            if (dtFields != null)
            {
                if (bDefaultSearch)
                {
                    // 12/14/2007 Paul.  Although it might be better to use events to get the sort field,
                    // that could cause an endless loop as this control sets the sort field and retrieves the sort field.
                    SplendidGrid grdMain = Parent.FindControl(sGridID) as SplendidGrid;
                    if (grdMain != null)
                    {
                        if (!String.IsNullOrEmpty(grdMain.SortColumn))
                        {
                            XmlNode xSortColumn = xml.CreateElement("SortColumn");
                            xSavedSearch.AppendChild(xSortColumn);
                            xSortColumn.InnerText = grdMain.SortColumn;
                        }
                        if (!String.IsNullOrEmpty(grdMain.SortOrder))
                        {
                            XmlNode xSortOrder = xml.CreateElement("SortOrder");
                            xSavedSearch.AppendChild(xSortOrder);
                            xSortOrder.InnerText = grdMain.SortOrder;
                        }
                    }
                    if (!Sql.IsEmptyString(lstSavedSearches.SelectedValue))
                    {
                        XmlNode xDefaultSearch = xml.CreateElement("DefaultSearch");
                        xSavedSearch.AppendChild(xDefaultSearch);
                        xDefaultSearch.InnerText = lstSavedSearches.SelectedValue;
                    }
                }
                else
                {
                    if (!Sql.IsEmptyString(lstColumns.SelectedValue))
                    {
                        XmlNode xSortColumn = xml.CreateElement("SortColumn");
                        xSavedSearch.AppendChild(xSortColumn);
                        xSortColumn.InnerText = lstColumns.SelectedValue;
                    }
                    if (radSavedSearchASC.Checked || radSavedSearchDESC.Checked)
                    {
                        XmlNode xSortOrder = xml.CreateElement("SortOrder");
                        xSavedSearch.AppendChild(xSortOrder);
                        if (radSavedSearchASC.Checked)
                        {
                            xSortOrder.InnerText = "asc";
                        }
                        else if (radSavedSearchDESC.Checked)
                        {
                            xSortOrder.InnerText = "desc";
                        }
                    }
                }

                XmlNode xSearchFields = xml.CreateElement("SearchFields");
                xSavedSearch.AppendChild(xSearchFields);
                foreach (DataRowView row in dtFields.DefaultView)
                {
                    string sFIELD_TYPE        = Sql.ToString(row["FIELD_TYPE"]);
                    string sDATA_FIELD        = Sql.ToString(row["DATA_FIELD"]);
                    string sDISPLAY_FIELD     = Sql.ToString(row["DISPLAY_FIELD"]);
                    int    nFORMAT_MAX_LENGTH = Sql.ToInteger(row["FORMAT_MAX_LENGTH"]);
                    int    nFORMAT_ROWS       = Sql.ToInteger(row["FORMAT_ROWS"]);

                    // 12/07/2007 Paul.  Create the field but don't append it unless it is used.
                    // This is how we will distinguish from unspecified field.
                    XmlNode xField = xml.CreateElement("Field");
                    XmlUtil.SetSingleNodeAttribute(xml, xField, "Name", sDATA_FIELD);
                    XmlUtil.SetSingleNodeAttribute(xml, xField, "Type", sFIELD_TYPE);
                    DynamicControl ctl = new DynamicControl(this, sDATA_FIELD);
                    if (ctl != null)
                    {
                        if (sFIELD_TYPE == "ListBox")
                        {
                            ListControl lst = FindControl(sDATA_FIELD) as ListControl;
                            if (lst != null)
                            {
                                if (lst is ListBox)
                                {
                                    int nSelected = 0;
                                    foreach (ListItem item in lst.Items)
                                    {
                                        if (item.Selected)
                                        {
                                            nSelected++;
                                        }
                                    }
                                    if (nSelected > 0)
                                    {
                                        xSearchFields.AppendChild(xField);
                                        foreach (ListItem item in lst.Items)
                                        {
                                            if (item.Selected)
                                            {
                                                XmlNode xValue = xml.CreateElement("Value");
                                                xField.AppendChild(xValue);
                                                xValue.InnerText = item.Value;
                                            }
                                        }
                                    }
                                }
                                else if (lst is DropDownList)
                                {
                                    // 12/13/2007 Paul.  DropDownLists must be handled separately to ensure that only one item is selected.
                                    xField.InnerText = lst.SelectedValue;
                                }
                            }
                        }
                        else if (sFIELD_TYPE == "DatePicker")
                        {
                            DatePicker ctlDate = FindControl(sDATA_FIELD) as DatePicker;
                            if (ctlDate != null)
                            {
                                if (!Sql.IsEmptyString(ctlDate.DateText))
                                {
                                    xSearchFields.AppendChild(xField);
                                    xField.InnerText = ctlDate.DateText;
                                }
                            }
                        }
                        else if (sFIELD_TYPE == "DateRange")
                        {
                            DatePicker ctlDateStart = FindControl(sDATA_FIELD + "_AFTER") as DatePicker;
                            if (ctlDateStart != null)
                            {
                                if (!Sql.IsEmptyString(ctlDateStart.DateText))
                                {
                                    xSearchFields.AppendChild(xField);
                                    XmlUtil.SetSingleNode(xml, xField, "After", ctlDateStart.DateText);
                                }
                            }
                            DatePicker ctlDateEnd = FindControl(sDATA_FIELD + "_BEFORE") as DatePicker;
                            if (ctlDateEnd != null)
                            {
                                if (!Sql.IsEmptyString(ctlDateEnd.DateText))
                                {
                                    xSearchFields.AppendChild(xField);
                                    XmlUtil.SetSingleNode(xml, xField, "Before", ctlDateEnd.DateText);
                                }
                            }
                        }
                        else if (sFIELD_TYPE == "CheckBox")
                        {
                            if (ctl.Checked)
                            {
                                xSearchFields.AppendChild(xField);
                                xField.InnerText = "true";
                            }
                        }
                        else if (sFIELD_TYPE == "TextBox")
                        {
                            ctl.Text = ctl.Text.Trim();
                            if (!Sql.IsEmptyString(ctl.Text))
                            {
                                xSearchFields.AppendChild(xField);
                                xField.InnerText = ctl.Text;
                            }
                        }
                        else if (sFIELD_TYPE == "ChangeButton")
                        {
                            ctl.Text = ctl.Text.Trim();
                            if (!Sql.IsEmptyString(ctl.Text))
                            {
                                xSearchFields.AppendChild(xField);
                                xField.InnerText = ctl.Text;
                            }
                            // 12/08/2007 Paul.  Save the display field as a separate XML node.
                            // Treat it as a text box and it will get populated just like any other search field.
                            DynamicControl ctlDISPLAY_FIELD = new DynamicControl(this, sDISPLAY_FIELD);
                            if (ctlDISPLAY_FIELD != null)
                            {
                                ctlDISPLAY_FIELD.Text = ctlDISPLAY_FIELD.Text.Trim();
                                xField = xml.CreateElement("Field");
                                XmlUtil.SetSingleNodeAttribute(xml, xField, "Name", sDISPLAY_FIELD);
                                XmlUtil.SetSingleNodeAttribute(xml, xField, "Type", "TextBox");
                                if (!Sql.IsEmptyString(ctlDISPLAY_FIELD.Text))
                                {
                                    xSearchFields.AppendChild(xField);
                                    xField.InnerText = ctlDISPLAY_FIELD.Text;
                                }
                            }
                        }
                    }
                }
            }
            return(xml.OuterXml);
        }