このアプローチを実装する必要があります。つまり、2 種類のデータを 1 つのパラメーター セットとして 1 つのパラメーターとして送信し、1 Type
つの型でこれら 2 つのパラメーターを保持できるようにする必要があります。Type
そうすれば、それを何らかの方法で処理するために渡すことができます。
最初のデータ項目は次のとおりです。
- 表示する列、名前:
displayed
2 番目のデータ項目:
- その Columnsのコピー (または一部のみ
displayed
) は、ソースが同じであるため、これらの列のみが表示されません... つまり、Columns to omitであるため、次のように名前を付けました。omitted
どちらも私が名前を付けたタイプの列です-SelectedColumns
public class SelectedcColoumns
{
public enum renederingMode
{
Displayed,
omitted
}
public class omitted
{
}
public class displayed
{
}
}
その SetOfColumns を表示するための要求は、テーブル名を選択することによって行われます。したがって、表示されるデータとしての Column クラスは、ユーザーが選択した利用可能なソースに基づいて異なりSelectedColumns
ます。
public class tableNames
{
public static readonly string tblCustomers = "tblCustomers";
public static readonly string tblProducts = "tblProducts";
}
public class TblColumns
{
public class tblCustomers
{
public const string custID = "custID",
Name = "Name",
Phone = "Phone";
Email = "Email";
}
public class tblProducts
{
public const string PrudctID = "PrudctID ",
PrudctName = "PrudctID",
PrudctCategory = "PrudctCategory";
}
...etc'
}
ユーザーがテーブル列のセットを選択すると、この例では、ユーザーはいずれかのテーブルから列を選択できCustomers
ますProducts
(例:SelectedColumns
列tblCustomers
)。次に、ユーザーが除外するために選択したリストの別のリストが必要です。 (表示しない) 使用可能なすべてのテーブル列から。
ユーザーが Table Customers をテーブルとして選択したとします。tblCustomers.custID
+を省略し tblCustomer.Email
たのは、名前と電話番号のみを表示する必要があるためです。
私が遭遇した問題は、これらのパラメーターを手の届くところに置いているときです (テーブル名 + 省略する列)。どうすればそれをプロセスに送信できますか ( One Parameterとして渡す)? そのため、これType
を送信パラメーターとして保持するために、専用のクラスを作成しました: all columns
+omitted Columns
一体型です。
これは私が現在立ち往生しているところです。ユーザーの選択からパラメーターを構築/構築するためにそれを使用する方法を知る必要があります。
public class SelectedColoumns
{
public enum renederingMode
{
Displayed,
omitted
}
public class omitted
{
List<string> omitCols_ListStr = new List<string>();
}
public class displayed
{
List<string> dispCols_ListStr = new List<string>();
}
}
この部分では、次のメソッドを使用して、データのサプライヤーreflection
として列のリストを取得します。
ネストされた Class-Fields, As List<string>
, By を取得し、ネストされclass-name
た親-を取得しますType
。
public static List<string> anyNestedClassFiledsAsListByType<ClassToReturnOneOfitsNested_Fields>(string NetedClassName)
{
var RetNestedClassFildsListValues = typeof(ClassToReturnOneOFitsNested).GetNestedTypes()
.First(t => String.Compare(t.Name, NetedClassName, true) == 0).GetFields(BindingFlags.Public | BindingFlags.Static)
.Where(f => f.FieldType == typeof(string)).Select(f => (string)f.GetValue(null)).ToList();
return RetNestedClassFildsListValues;
}
これを生成するには、上記の方法を使用できます
var TableColumns_ALL =
anyNestedClassFldsAsListByType<TblColumns>(tableNames.tblCustomers);
私の質問は、TableColumns_ALL + 選択した列を送信して省略し、以下で処理する必要があるクラスに関連していrenderSelectedTable()
ます。
したがって、リフレクションの複雑さよりもさらに基本的なことですが、それでもポッパーを構築する方法がわからないSelectedColumns class
ため、メソッドはパラメーターとして送信されるこの新しいデータ型の構造に対応し、フォーマットします。このようなもの。
public void renderSelectedTable(SelectedColoumns CurrentUserSelectedCols)
{
StringBuilder NwTRLoopSB = new StringBuilder();
string curRowStyle= string.Empty,
nwLine = Environment.NewLine + "\t\t\t",
BaseTemplateTD = string.Empty;
NwTRLoopSB.Append(
string.Format(
"<table id='tbl_Settings' cellspacing='0' border='1'><tr id='TR_headers'{0}>{1}",
curRowStyle,
nwLine
)._Dhtml_DoubleQoutes()
);
foreach (var Item in SelectedListStr.Select((Val, counter) => new { Value = Val, Index = counter }))
{
curRowStyle = Lsts.DynamicStyle_Generator(Item.Index);
if(Lsts.ExcludeColumns(Item.Value, OmittedCols))
{
BaseTemplateTD = string.Format("<td>{0}</td>{1}", Item.Value, nwLine)._Dhtml_DoubleQoutes();
NwTRLoopSB.Append(BaseTemplateTD);
}
}///ENd TR cells generator Section
NwTRLoopSB.Append("</tr></table>");
return NwTRLoopSB.ToString();
}