トリミングとは、次のような意味です。
名「ジョン」->「ジョン」にトリミング
姓「レノン」->「レノン」にトリミング
FormViewにこれらのテキストボックスがあり、Bind( "FirstName")を使用してプロパティでバインドしています。
FormViewはエンティティデータソースとバインドします。
保存する前にこれらの値をトリミングしたいのですが、これを行うための最良の方法は何ですか?
formView.Controls
.OfType<System.Web.UI.WebControls.TextBox>()
.ToList()
.ForEach(t => t.Text = t.Text.Trim());
これを試して:
TextBox.Text.Trim();
String.Trim() //for triming
For saving the labor, what you can do is to create a helper method, and intercept it before any binding set.
I had once such similar scenario, where i need to log every SQL query (ExecuteReader, ExecuteNonQuery) with parameters.
What i simply did was to create a static method excepting IDBCommand. Then logged all the parameters in it. After that called the executed.
Example
public static CommandIntercepter
{
void ExecuteNonQuery(IDbCommand command)
{
...//logged all parameters
command.ExecuteNonQuery()
}
}
Now I had replaced command.ExecuteNonQuery, with CommandIntercepter.ExecuteNonQuery(command) through the code.
This way, i was saved from logging individual query parameters at different code points.
If you have such intercepting point inside Bind(String propertyName), you can do trimming there. Or You can create TrimBind function, and call TrimBind instead of Bind
void TrimBind(String propertyName)
{
...//do trimming
Bind(propertyName);
}
方法はあなたstring.Trim()
が望むものです。
テキストボックスのテキストをトリミングされたテキストに置き換えます。次に、テキストボックステキストからデータベースに保存するコードを記述します。このようにして、UIとバックエンドのテキストは同じになり、修正されます。
mytextbox.Text = mytextbox.Text.Trim();
//save textbox text in database
すべての答えに感謝..私はついにこれを思いつきました。
フォームビューでのトリミング
protected void frmSubScription_ItemInserting(object sender, FormViewInsertEventArgs e)
{
Page.Validate("signUp");
if (Page.IsValid == false)
{
e.Cancel = true;
}
// trimimg value
for (int i = 0; i < e.Values.Count; i++)
{
e.Values[i] = e.Values[i].ToString().Trim();
}
}
GridView でのトリミング
protected void gdvSubscribers_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// trimimg value
for (int i = 0; i < e.NewValues.Count; i++)
{
if (e.NewValues[i] is string)
{
e.NewValues[i] = e.NewValues[i].ToString().Trim();
}
}
}
テキストボックスが2つしかない場合は、使用できます
string firstName = txtFirstName.Text.Trim();
string lastName = txtLastName.Text.Trim();
使用するテキストボックスの数がわからない場合、またはテキストボックスが多数あり、複数のページであってもすべてをトリミングしたい場合は、TextBox の拡張プロパティを作成し、その Text プロパティをオーバーライドして、常にトリミングされた値を返すことをお勧めします。
OnItemInserting
またはOnItemUpdating
イベントを使用して、データソースに送信する前にデータをトリミングすることもできます
protected void ItemInsetring(object sender, FormViewInsertEventArgs e)
{
FormView fv = sender as FormView;
foreach (FormViewRow r in fv.Controls[0].Controls)
{
foreach (TableCell cell in r.Controls)
{
foreach (TextBox txtin cell.Controls.OfType<TextBox>())
{
txt.Text = txt.Text.Trim();
}
}
}
}
次のようなことができます。
private void TrimTextBoxes(DependencyObject depObject)
{
if (depObject is TextBox)
{
TextBox txt = depObject as TextBox;
txt.Text = txt.Text.Trim();
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++)
{
TrimTextBoxes(VisualTreeHelper.GetChild(depObject, i));
}
}
これにより、すべてのコントロールが繰り返されます。メイン グリッドに名前を付ける必要があります。この場合は<Grid x:Name="Grid1">
です。その後、コード ビハインドでメソッドを呼び出します。
TrimTextBoxes(this.Grid1);
これにより、メイン グリッド内のすべてのテキスト ボックスがトリミングされます。それが役に立てば幸い