• Master Coders - Niezawodne oprogramowanie dla firm

Kategoria: studio

The specified solution configuration „Debug|MCD” (oraz Debug|HPD, Debug|BNB itp.) is invalid

Podczas kompilowania projektu na nowym lapku moim oczom ukazał się komunikat : „The specified solution configuration „Debug|MCD” is invalid” . Po przejrzeniu 10 razy całej konfiguracji i wszystkich opcji konfiguracji nigdzie nie znalazłem wspomnianego MCD. W czym tkwi w konfiguracji komputera a dokładnie samego Windowsa. Należy wejść do edytora rejestru odnaleźć ścieżkę :

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment

a w niej klucz o nazwie Platfrom . Wystarczy zmienić wartość tego klucza tak aby pozostała pusta. Powoduje to przyjęcie domyślnej platformy przez kompilator .NET Framework.

Telerik radgrid i dropdown filter

Telerk w swoim pakiecie kontrolek asp.net zabiera bardzo fajną alternatywę dla GridView, która nazywa się RadGrid. Daje na multum opcji dotyczących stylowania, CRUD, oraz sposobu wyświetlania danych. Zawiera też prawie idealną kontrolkę do filtrowania. Nad każdą kolumną w Gridzie dostajemy textboxa oraz komplet pełen komplet fitlrów wprost z SQL . Wręcz idealnie, no prawie 🙂 Często mamy sytuacje że w tablece mamy jakiegoś idka który odwołuję się do pewnej wartośći ze słownika. I co wtedy? dostajemy takiego samego textboxa i zestaw filtrów dla inta. Trochę to mało user friendly chciało by się rzec. Co zrobić z tym fantem ? Tu z pomocą przychodzi nam model obiektowy telerika, który pozwala przeciążyć klasy odpowiedzialne za kolumny i powiedzieć jej żeby używały jakiegos zajebistego dropdowna zamiast tego tandetnego textboxa. Musimy stworzyć klasę dziedziczącą po GridDropDownColumn i przeciążyć w niej następujące metody SetupFilterControls odowiadającą za ustawienie kontrolki filtrującej, SetCurrentFilterValueToControl, która przekazuje bierzącą wartość do kontrolki filtrującej, GetCurrentFilterValueFromControl , która oczywiście wyciąga wartość z kontrolki filtrującej. Przydaje się na koniec obsłużyć zdarzenie SelectedIndexChanged tej kontrolki, żeby filtrowanie wyników następowało po wybraniu jakiejś konkretnej wartości.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Telerik.Web.UI;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace demo
{
public class FilterCombo : GridDropDownColumn
{
private object listDataSource = null;
//RadGrid calls this method when it initializes the controls inside the filtering item cells
protected override void SetupFilterControls(TableCell cell)
{
base.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
DropDownList list = new DropDownList();
list.ID = "list" + this.DataField;

list.AutoPostBack = true;
list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged);
cell.Controls.AddAt(0, list);
cell.Controls.RemoveAt(1);
list.DataTextField = this.ListTextField;
list.DataValueField = this.ListValueField;
//list.DataSource = this.ListDataSource;
list.DataSourceID = this.DataSourceID;
}
void list_SelectedIndexChanged(object sender, EventArgs e)
{
GridFilteringItem filterItem = (sender as DropDownList).NamingContainer as GridFilteringItem;
if (this.DataType == System.Type.GetType("System.Int32") ||
this.DataType == System.Type.GetType("System.Int16") ||
this.DataType == System.Type.GetType("System.Int64"))
{
filterItem.FireCommandEvent("Filter", new Pair("EqualTo", this.UniqueName));
}
else // treat everything else like a string
filterItem.FireCommandEvent("Filter", new Pair("Contains", this.UniqueName));
}
public object ListDataSource
{
get { return this.listDataSource; }
set { listDataSource = value; }
}
//RadGrid calls this method when the value should be set to the filtering input control(s)
protected override void SetCurrentFilterValueToControl(TableCell cell)
{
base.SetCurrentFilterValueToControl(cell);
DropDownList list = (DropDownList)cell.Controls[0];
if (this.CurrentFilterValue != string.Empty)
{
list.SelectedValue = this.CurrentFilterValue;
}
}
//RadGrid calls this method to extract the filtering value from the filtering input control(s)
protected override string GetCurrentFilterValueFromControl(TableCell cell)
{
DropDownList list = (DropDownList)cell.Controls[0];
return list.SelectedValue;
}
protected override string GetFilterDataField()
{
return this.DataField;
}
}
}

Jak z tego korzystać ? Po pierwsze importujemy naszą klasę do pliku aspx:


<%@ Register Namespace="demo" Assembly="demo" TagPrefix="demo" %>

A następnie wywołujemy kolumnę tak jakbyśmy korzystali z GridDropDownColumn.


<demo:FilterCombo Reorderable="true" DataField="UserId" ReadOnly="true" DataSourceID="UserDataSource"
DataType="System.String" HeaderText="Nazwa użytkownika" SortExpression="UserId" UniqueName="UserId"
ListTextField="UserName" ListValueField="UserId">
</demo:FilterCombo>

To rozwiązanie ma jedno ale : nie można w prosty sposób wyczyścić filtrów .
Aby wrócić trzeba dodać dodatkowy przycisk do czyszczenia filtrów w ten sposób :


<CommandItemTemplate>
<asp:LinkButton runat="server" ID="LinkButton1" Text="Wyczyć filtrowanie" CommandName="ClearFilters" />
</CommandItemTemplate>

i nbsłużyć go w zdarzeniu itemCommand RadGrida:


protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)
{
if (e.CommandName == "ClearFilters")
{
foreach (GridColumn column in RadGrid1.MasterTableView.Columns)
{
column.CurrentFilterFunction = GridKnownFunction.NoFilter;
column.CurrentFilterValue = String.Empty;
}
RadGrid1.MasterTableView.FilterExpression = String.Empty;
RadGrid1.MasterTableView.Rebind();
}
}

Zduplikowane pozycje w Toolboxie.

Dzisiaj odpalając moja aplikacje webowa w Visual Studio Proffesionall stwierdziłem że w niemal wszystkie pozycje są zdublowane. Miałem np. po 4 listboxy,xmle, textboxy czy buttony. Wiadomo że zawsze można zrobić porządek ręcznie. Jeśli jednak nie macie akurat kilku godzin wolnego żeby przekopać się przez wszystkie itemy, udajcie sie do katalogu: 

C:Usersuser_nameAppDataLocalMicrosoftVisualStudio9.0

w Windows Vista i 7 lub

C:Documents and Settingsuser_nameUstawienia LokalneMicrosoftVisualStudio9.0

w Windows XP/2000.

A następnie skasować wszystkie pliki *.tbd.

Potem wystarczy przywrócić starą konfigurację.