rowfilter表达式中变量的特殊字符处理
工作境:windowsXP(SP3)+.net2005+crystalReport11版
以下加源及的代:
DataTable dt = new DataTable();
private void Form2_Load(object sender, EventArgs e)
{
DataColumn dc = new DataColumn("c1", typeof(int));
dt.Columns.Add(dc);
dc = new DataColumn("c2", typeof(string));
dt.Columns.Add(dc);
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "中";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "香港";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "台";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 4;
dr[1] = "RP001_A'JANAE(女)";
textBox1.Text = dr[1].ToString().Trim();
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 5;
dr[1] = @"RP001_A\JANAE(女)";
dt.Rows.Add(dr);
dataGridView1.DataSource = dt.DefaultView;
}
private void button1_Click(object sender, EventArgs e)
{
string filter = textBox1.Text.Trim();
if (filter == "")
dt.DefaultView.RowFilter = "";
else
dt.DefaultView.RowFilter = "c2='" + @filter + "'";
}
明:c2列的料是不可以修改的;除非在取料料行中的特殊字符做理(不希望如此).
:要示c2列容"RP001_A'JANAE(女)"的料.
按下button1,提示:法: 'JANAE' 算子之後漏算元。
string filter = textBox1.Text.Trim();
改成以下也不行
string filter = textBox1.Text.Trim().Replace("'", "\'");
[解决办法]
==>dr[1] = "RP001_A'JANAE(女)";
改成下面的看看:
dr[1] = "RP001_A''JANAE(女)";
[解决办法]
如1楼所言,用两个单引号替换一个单引号:
string filter = textBox1.Text.Trim().Replace("'", "''");
[解决办法]