syncfusion-blazor-query-builder
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseImplementing Syncfusion Blazor Query Builder
实现Syncfusion Blazor Query Builder
The Syncfusion Blazor Query Builder component enables you to build dynamic, customizable query interfaces for filtering data with complex conditions, nested groups, and rule-based logic. It's ideal for advanced search UIs, business rule engines, and data filtering workflows.
Syncfusion Blazor Query Builder组件可帮助您构建动态、可定制的查询界面,用于通过复杂条件、嵌套组和基于规则的逻辑过滤数据。它非常适用于高级搜索UI、业务规则引擎和数据过滤工作流。
Component Overview
组件概述
The Query Builder organizes filtering logic into:
- Rules: Individual conditions (field = value)
- Groups: Collections of rules combined with AND/OR logic
- Operators: Comparison types (equal, contains, between, etc.)
- Columns: Data source fields that can be filtered
Key capabilities include programmatic rule/group management, event handling, drag-drop UI, state persistence, and extensive customization options.
Query Builder将过滤逻辑分为以下部分:
- Rules:单个条件(字段=值)
- Groups:通过AND/OR逻辑组合的规则集合
- Operators:比较类型(等于、包含、介于等)
- Columns:可被过滤的数据源字段
核心功能包括程序化规则/组管理、事件处理、拖放UI、状态持久化以及丰富的自定义选项。
Navigation Guide
导航指南
Getting Started
快速入门
📄 Read: references/getting-started.md
- Installation & setup for Blazor WebAssembly and Blazor Server
- NuGet package configuration
- Initial project setup
- Running your first Query Builder
📄 阅读: references/getting-started.md
- Blazor WebAssembly和Blazor Server的安装与设置
- NuGet包配置
- 初始项目搭建
- 运行您的第一个Query Builder
Basic Setup & Configuration
基础设置与配置
📄 Read: references/basic-setup.md
- Creating the Query Builder component
- Defining columns and data types
- Configuring button visibility
- Setting default rules and initial state
📄 阅读: references/basic-setup.md
- 创建Query Builder组件
- 定义列与数据类型
- 配置按钮可见性
- 设置默认规则与初始状态
Filtering, Rules & Groups (Core Feature)
过滤、规则与组(核心功能)
📄 Read: references/filtering-and-rules.md
- Adding and deleting rules programmatically
- Creating and managing groups
- Operators and conditions
- Complex nested group patterns
- User interaction and validation
📄 阅读: references/filtering-and-rules.md
- 程序化添加和删除规则
- 创建与管理组
- 操作符与条件
- 复杂嵌套组模式
- 用户交互与验证
Data Binding & Filtered Results
数据绑定与过滤结果
📄 Read: references/data-binding.md
- Binding data sources to Query Builder
- Extracting and working with filtered records
- Dynamic data loading patterns
- Applying queries to datasets
📄 阅读: references/data-binding.md
- 将数据源绑定到Query Builder
- 提取并处理过滤后的记录
- 动态数据加载模式
- 将查询应用于数据集
Events & Callbacks (Core Feature)
事件与回调(核心功能)
📄 Read: references/events-and-callbacks.md
- Component lifecycle events (Created, Destroyed)
- Rule change tracking (RuleChanged, Changed)
- Pre-change validation (OnValueChange)
- Event-driven query updates
📄 阅读: references/events-and-callbacks.md
- 组件生命周期事件(Created、Destroyed)
- 规则变更跟踪(RuleChanged、Changed)
- 变更前验证(OnValueChange)
- 事件驱动的查询更新
Customization & Styling
自定义与样式
📄 Read: references/customization-and-styling.md
- CSS customization and theming
- Template support for custom UI
- Custom operator definitions
- Visual styling of groups and rules
📄 阅读: references/customization-and-styling.md
- CSS自定义与主题设置
- 自定义UI的模板支持
- 自定义操作符定义
- 组与规则的视觉样式
Advanced Features
高级功能
📄 Read: references/advanced-features.md
- Import/export queries (JSON, URL parameters)
- State persistence and local storage
- Drag-drop rule and group management
- Lock/clone group rules
- Read-only modes
- Query sorting and filtering
📄 阅读: references/advanced-features.md
- 查询导入/导出(JSON、URL参数)
- 状态持久化与本地存储
- 规则与组的拖放管理
- 锁定/克隆组规则
- 只读模式
- 查询排序与过滤
Localization & Accessibility
本地化与可访问性
📄 Read: references/localization-and-accessibility.md
- Multi-language support (localization)
- Right-to-Left (RTL) support
- Accessibility best practices
- Keyboard navigation
- Screen reader support
📄 阅读: references/localization-and-accessibility.md
- 多语言支持(本地化)
- 从右到左(RTL)支持
- 可访问性最佳实践
- 键盘导航
- 屏幕阅读器支持
Troubleshooting
故障排除
📄 Read: references/troubleshooting.md
- Common configuration issues
- Event handling problems
- Data binding troubleshooting
- Performance optimization
- Testing strategies
📄 阅读: references/troubleshooting.md
- 常见配置问题
- 事件处理问题
- 数据绑定故障排除
- 性能优化
- 测试策略
Quick Start
快速开始
Here's a minimal example to get started:
razor
@using Syncfusion.Blazor.QueryBuilder
<SfQueryBuilder TValue="Order" DataSource="@Orders">
<QueryBuilderColumns>
<QueryBuilderColumn Field="OrderID" Label="Order ID" Type="ColumnType.Number"></QueryBuilderColumn>
<QueryBuilderColumn Field="CustomerName" Label="Customer" Type="ColumnType.String"></QueryBuilderColumn>
<QueryBuilderColumn Field="OrderDate" Label="Date" Type="ColumnType.Date"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
@code {
private List<Order> Orders { get; set; } = new()
{
new() { OrderID = 1, CustomerName = "Acme Corp", OrderDate = new(2024, 1, 15) },
new() { OrderID = 2, CustomerName = "Tech Ltd", OrderDate = new(2024, 2, 20) }
};
public class Order {
public int OrderID { get; set; }
public string CustomerName { get; set; }
public DateTime OrderDate { get; set; }
}
}以下是一个最简入门示例:
razor
@using Syncfusion.Blazor.QueryBuilder
<SfQueryBuilder TValue="Order" DataSource="@Orders">
<QueryBuilderColumns>
<QueryBuilderColumn Field="OrderID" Label="Order ID" Type="ColumnType.Number"></QueryBuilderColumn>
<QueryBuilderColumn Field="CustomerName" Label="Customer" Type="ColumnType.String"></QueryBuilderColumn>
<QueryBuilderColumn Field="OrderDate" Label="Date" Type="ColumnType.Date"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
@code {
private List<Order> Orders { get; set; } = new()
{
new() { OrderID = 1, CustomerName = "Acme Corp", OrderDate = new(2024, 1, 15) },
new() { OrderID = 2, CustomerName = "Tech Ltd", OrderDate = new(2024, 2, 20) }
};
public class Order {
public int OrderID { get; set; }
public string CustomerName { get; set; }
public DateTime OrderDate { get; set; }
}
}Common Patterns
常见模式
Add a Rule Programmatically
程序化添加规则
razor
<SfButton OnClick="AddFilterRule">Add Rule</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private async Task AddFilterRule() {
var rule = new RuleModel {
Label = "Order ID",
Field = "OrderID",
Type = "Number",
Operator = "equal",
Value = 1000
};
await QueryBuilder.AddRule(rule, "group0");
}
}razor
<SfButton OnClick="AddFilterRule">Add Rule</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private async Task AddFilterRule() {
var rule = new RuleModel {
Label = "Order ID",
Field = "OrderID",
Type = "Number",
Operator = "equal",
Value = 1000
};
await QueryBuilder.AddRule(rule, "group0");
}
}Capture Query Changes
捕获查询变更
razor
<SfQueryBuilder TValue="Order" DataSource="@Orders">
<QueryBuilderEvents TValue="Order" RuleChanged="OnRuleChanged"></QueryBuilderEvents>
</SfQueryBuilder>
@code {
private void OnRuleChanged(RuleChangeEventArgs args) {
Console.WriteLine($"Query changed: {args.RuleID}");
// Apply new filter or update results
}
}razor
<SfQueryBuilder TValue="Order" DataSource="@Orders">
<QueryBuilderEvents TValue="Order" RuleChanged="OnRuleChanged"></QueryBuilderEvents>
</SfQueryBuilder>
@code {
private void OnRuleChanged(RuleChangeEventArgs args) {
Console.WriteLine($"Query changed: {args.RuleID}");
// 应用新过滤器或更新结果
}
}Export Query to JSON
将查询导出为JSON
razor
<SfButton OnClick="ExportQuery">Export</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private async Task ExportQuery() {
var queryJson = QueryBuilder.GetRules();
// Save or transmit queryJson
}
}razor
<SfButton OnClick="ExportQuery">Export</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private async Task ExportQuery() {
var queryJson = QueryBuilder.GetRules();
// 保存或传输queryJson
}
}Clone a Rule or Group
克隆规则或组
razor
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderShowButtons CloneGroup="true" CloneRule="true"></QueryBuilderShowButtons>
</SfQueryBuilder>
<SfButton OnClick="CloneRule">Clone Rule</SfButton>
<SfButton OnClick="CloneGroup">Clone Group</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private void CloneRule() {
// Clone the first rule at position 1
QueryBuilder.CloneRule("group0_rule0", 1);
}
private void CloneGroup() {
// Clone group1 at position 2
QueryBuilder.CloneGroup("group1", 2);
}
}razor
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderShowButtons CloneGroup="true" CloneRule="true"></QueryBuilderShowButtons>
</SfQueryBuilder>
<SfButton OnClick="CloneRule">Clone Rule</SfButton>
<SfButton OnClick="CloneGroup">Clone Group</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private void CloneRule() {
// 在位置1克隆第一个规则
QueryBuilder.CloneRule("group0_rule0", 1);
}
private void CloneGroup() {
// 在位置2克隆group1
QueryBuilder.CloneGroup("group1", 2);
}
}Lock a Rule or Group
锁定规则或组
razor
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderShowButtons LockGroup="true" LockRule="true"></QueryBuilderShowButtons>
</SfQueryBuilder>
<SfButton OnClick="LockRule">Lock Rule</SfButton>
<SfButton OnClick="UnlockRule">Unlock Rule</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private void LockRule() {
// Lock the rule to prevent editing
QueryBuilder.LockRule("group0_rule0", true);
}
private void UnlockRule() {
// Unlock the rule to allow editing
QueryBuilder.LockRule("group0_rule0", false);
}
}razor
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderShowButtons LockGroup="true" LockRule="true"></QueryBuilderShowButtons>
</SfQueryBuilder>
<SfButton OnClick="LockRule">Lock Rule</SfButton>
<SfButton OnClick="UnlockRule">Unlock Rule</SfButton>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private void LockRule() {
// 锁定规则以防止编辑
QueryBuilder.LockRule("group0_rule0", true);
}
private void UnlockRule() {
// 解锁规则以允许编辑
QueryBuilder.LockRule("group0_rule0", false);
}
}Query Export Methods
查询导出方法
The Query Builder provides built-in methods to export queries in different formats:
Query Builder提供内置方法,可将查询导出为不同格式:
1. GetSqlFromRules - Export as Inline SQL
1. GetSqlFromRules - 导出为内联SQL
Convert query rules to standard SQL WHERE clause format:
razor
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderColumns>
<QueryBuilderColumn Field="OrderID" Label="Order ID" Type="ColumnType.Number"></QueryBuilderColumn>
<QueryBuilderColumn Field="CustomerName" Label="Customer" Type="ColumnType.String"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
<SfButton OnClick="ExportInlineSQL">Get SQL Query</SfButton>
<p>@SqlQuery</p>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string SqlQuery = "";
private void ExportInlineSQL() {
RuleModel rules = QueryBuilder.GetValidRules();
SqlQuery = QueryBuilder.GetSqlFromRules(rules);
// Output: "OrderID = 1000 AND CustomerName LIKE '%Acme%'"
}
public class Order {
public int OrderID { get; set; }
public string CustomerName { get; set; }
}
}将查询规则转换为标准SQL WHERE子句格式:
razor
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderColumns>
<QueryBuilderColumn Field="OrderID" Label="Order ID" Type="ColumnType.Number"></QueryBuilderColumn>
<QueryBuilderColumn Field="CustomerName" Label="Customer" Type="ColumnType.String"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
<SfButton OnClick="ExportInlineSQL">Get SQL Query</SfButton>
<p>@SqlQuery</p>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string SqlQuery = "";
private void ExportInlineSQL() {
RuleModel rules = QueryBuilder.GetValidRules();
SqlQuery = QueryBuilder.GetSqlFromRules(rules);
// 输出: "OrderID = 1000 AND CustomerName LIKE '%Acme%'"
}
public class Order {
public int OrderID { get; set; }
public string CustomerName { get; set; }
}
}2. GetParameterSql - Export as Parameterized SQL
2. GetParameterSql - 导出为参数化SQL
Export SQL with indexed parameters to prevent SQL injection:
razor
@using System.Text.Json
<SfButton OnClick="ExportParameterSQL">Get Parameterized SQL</SfButton>
<pre>@ParameterSqlJson</pre>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string ParameterSqlJson = "";
private void ExportParameterSQL() {
RuleModel rules = QueryBuilder.GetValidRules();
ParameterSql paramSql = QueryBuilder.GetParameterSql(rules);
ParameterSqlJson = JsonSerializer.Serialize(paramSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
// Access individual properties:
// paramSql.Sql - SQL string with ? placeholders
// paramSql.Parameters - List of parameter values
}
}Output Example:
json
{
"Sql": "OrderID = ? AND CustomerName LIKE ?",
"Parameters": [1000, "%Acme%"]
}导出带有索引参数的SQL以防止SQL注入:
razor
@using System.Text.Json
<SfButton OnClick="ExportParameterSQL">Get Parameterized SQL</SfButton>
<pre>@ParameterSqlJson</pre>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string ParameterSqlJson = "";
private void ExportParameterSQL() {
RuleModel rules = QueryBuilder.GetValidRules();
ParameterSql paramSql = QueryBuilder.GetParameterSql(rules);
ParameterSqlJson = JsonSerializer.Serialize(paramSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
// 访问单个属性:
// paramSql.Sql - 带有?占位符的SQL字符串
// paramSql.Parameters - 参数值列表
}
}输出示例:
json
{
"Sql": "OrderID = ? AND CustomerName LIKE ?",
"Parameters": [1000, "%Acme%"]
}3. GetNamedParameterSql - Export as Named Parameter SQL
3. GetNamedParameterSql - 导出为命名参数SQL
Export SQL with named parameters (@param0, @param1, etc.):
razor
@using System.Text.Json
<SfButton OnClick="ExportNamedParameterSQL">Get Named Parameter SQL</SfButton>
<pre>@NamedParameterSqlJson</pre>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string NamedParameterSqlJson = "";
private void ExportNamedParameterSQL() {
RuleModel rules = QueryBuilder.GetValidRules();
NamedParameterSql namedParamSql = QueryBuilder.GetNamedParameterSql(rules);
NamedParameterSqlJson = JsonSerializer.Serialize(namedParamSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
// Access individual properties:
// namedParamSql.Sql - SQL string with @param placeholders
// namedParamSql.Parameters - Dictionary of parameter names/values
}
}Output Example:
json
{
"Sql": "OrderID = @param0 AND CustomerName LIKE @param1",
"Parameters": {
"@param0": 1000,
"@param1": "%Acme%"
}
}导出带有命名参数(@param0、@param1等)的SQL:
razor
@using System.Text.Json
<SfButton OnClick="ExportNamedParameterSQL">Get Named Parameter SQL</SfButton>
<pre>@NamedParameterSqlJson</pre>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string NamedParameterSqlJson = "";
private void ExportNamedParameterSQL() {
RuleModel rules = QueryBuilder.GetValidRules();
NamedParameterSql namedParamSql = QueryBuilder.GetNamedParameterSql(rules);
NamedParameterSqlJson = JsonSerializer.Serialize(namedParamSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
// 访问单个属性:
// namedParamSql.Sql - 带有@param占位符的SQL字符串
// namedParamSql.Parameters - 参数名称/值的字典
}
}输出示例:
json
{
"Sql": "OrderID = @param0 AND CustomerName LIKE @param1",
"Parameters": {
"@param0": 1000,
"@param1": "%Acme%"
}
}4. GetMongoQuery - Export as MongoDB Query
4. GetMongoQuery - 导出为MongoDB查询
Convert query rules to MongoDB query format:
razor
@using System.Text.Json
<SfButton OnClick="ExportMongoQuery">Get MongoDB Query</SfButton>
<pre>@MongoQueryJson</pre>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string MongoQueryJson = "";
private void ExportMongoQuery() {
RuleModel rules = QueryBuilder.GetValidRules();
string mongoQuery = QueryBuilder.GetMongoQuery(rules);
// Pretty print the JSON
JsonDocument jsonDoc = JsonDocument.Parse(mongoQuery);
MongoQueryJson = JsonSerializer.Serialize(jsonDoc.RootElement, new JsonSerializerOptions {
WriteIndented = true
});
}
}Output Example:
json
{
"$and": [
{ "OrderID": { "$eq": 1000 } },
{ "CustomerName": { "$regex": "Acme", "$options": "i" } }
]
}将查询规则转换为MongoDB查询格式:
razor
@using System.Text.Json
<SfButton OnClick="ExportMongoQuery">Get MongoDB Query</SfButton>
<pre>@MongoQueryJson</pre>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string MongoQueryJson = "";
private void ExportMongoQuery() {
RuleModel rules = QueryBuilder.GetValidRules();
string mongoQuery = QueryBuilder.GetMongoQuery(rules);
// 格式化JSON输出
JsonDocument jsonDoc = JsonDocument.Parse(mongoQuery);
MongoQueryJson = JsonSerializer.Serialize(jsonDoc.RootElement, new JsonSerializerOptions {
WriteIndented = true
});
}
}输出示例:
json
{
"$and": [
{ "OrderID": { "$eq": 1000 } },
{ "CustomerName": { "$regex": "Acme", "$options": "i" } }
]
}Import Query Methods
查询导入方法
You can also import queries back into the Query Builder:
razor
@code {
// Import from SQL
private void ImportSQL(string sqlQuery) {
QueryBuilder.SetRulesFromSql(sqlQuery);
}
// Import from Parameterized SQL
private void ImportParameterSQL(ParameterSql paramSql) {
QueryBuilder.SetParameterSql(paramSql);
}
// Import from Named Parameter SQL
private void ImportNamedParameterSQL(NamedParameterSql namedParamSql) {
QueryBuilder.SetNamedParameterSql(namedParamSql);
}
// Import from MongoDB Query
private void ImportMongoQuery(string mongoQuery) {
QueryBuilder.SetMongoQuery(mongoQuery);
}
}您也可以将查询重新导入到Query Builder中:
razor
@code {
// 从SQL导入
private void ImportSQL(string sqlQuery) {
QueryBuilder.SetRulesFromSql(sqlQuery);
}
// 从参数化SQL导入
private void ImportParameterSQL(ParameterSql paramSql) {
QueryBuilder.SetParameterSql(paramSql);
}
// 从命名参数SQL导入
private void ImportNamedParameterSQL(NamedParameterSql namedParamSql) {
QueryBuilder.SetNamedParameterSql(namedParamSql);
}
// 从MongoDB查询导入
private void ImportMongoQuery(string mongoQuery) {
QueryBuilder.SetMongoQuery(mongoQuery);
}
}Complete Query Export/Import Example
完整查询导出/导入示例
razor
@page "/query-export-demo"
@using Syncfusion.Blazor.QueryBuilder
@using Syncfusion.Blazor.Buttons
@using System.Text.Json
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderColumns>
<QueryBuilderColumn Field="OrderID" Label="Order ID" Type="ColumnType.Number"></QueryBuilderColumn>
<QueryBuilderColumn Field="CustomerName" Label="Customer" Type="ColumnType.String"></QueryBuilderColumn>
<QueryBuilderColumn Field="OrderDate" Label="Order Date" Type="ColumnType.Date"></QueryBuilderColumn>
<QueryBuilderColumn Field="Amount" Label="Amount" Type="ColumnType.Number"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
<div class="button-group">
<SfButton OnClick="@(() => ExportQuery("SQL"))">Export SQL</SfButton>
<SfButton OnClick="@(() => ExportQuery("ParameterSQL"))">Export Parameter SQL</SfButton>
<SfButton OnClick="@(() => ExportQuery("NamedSQL"))">Export Named SQL</SfButton>
<SfButton OnClick="@(() => ExportQuery("MongoDB"))">Export MongoDB</SfButton>
</div>
<div class="output">
<h3>@OutputTitle</h3>
<pre>@OutputQuery</pre>
</div>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string OutputQuery = "";
private string OutputTitle = "";
private void ExportQuery(string format) {
RuleModel rules = QueryBuilder.GetValidRules();
switch(format) {
case "SQL":
OutputTitle = "Inline SQL Query";
OutputQuery = QueryBuilder.GetSqlFromRules(rules);
break;
case "ParameterSQL":
OutputTitle = "Parameterized SQL Query";
ParameterSql paramSql = QueryBuilder.GetParameterSql(rules);
OutputQuery = JsonSerializer.Serialize(paramSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
break;
case "NamedSQL":
OutputTitle = "Named Parameter SQL Query";
NamedParameterSql namedSql = QueryBuilder.GetNamedParameterSql(rules);
OutputQuery = JsonSerializer.Serialize(namedSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
break;
case "MongoDB":
OutputTitle = "MongoDB Query";
string mongoQuery = QueryBuilder.GetMongoQuery(rules);
JsonDocument jsonDoc = JsonDocument.Parse(mongoQuery);
OutputQuery = JsonSerializer.Serialize(jsonDoc.RootElement, new JsonSerializerOptions {
WriteIndented = true
});
break;
}
}
public class Order {
public int OrderID { get; set; }
public string CustomerName { get; set; }
public DateTime OrderDate { get; set; }
public decimal Amount { get; set; }
}
}razor
@page "/query-export-demo"
@using Syncfusion.Blazor.QueryBuilder
@using Syncfusion.Blazor.Buttons
@using System.Text.Json
<SfQueryBuilder TValue="Order" @ref="QueryBuilder">
<QueryBuilderColumns>
<QueryBuilderColumn Field="OrderID" Label="Order ID" Type="ColumnType.Number"></QueryBuilderColumn>
<QueryBuilderColumn Field="CustomerName" Label="Customer" Type="ColumnType.String"></QueryBuilderColumn>
<QueryBuilderColumn Field="OrderDate" Label="Order Date" Type="ColumnType.Date"></QueryBuilderColumn>
<QueryBuilderColumn Field="Amount" Label="Amount" Type="ColumnType.Number"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
<div class="button-group">
<SfButton OnClick="@(() => ExportQuery("SQL"))">Export SQL</SfButton>
<SfButton OnClick="@(() => ExportQuery("ParameterSQL"))">Export Parameter SQL</SfButton>
<SfButton OnClick="@(() => ExportQuery("NamedSQL"))">Export Named SQL</SfButton>
<SfButton OnClick="@(() => ExportQuery("MongoDB"))">Export MongoDB</SfButton>
</div>
<div class="output">
<h3>@OutputTitle</h3>
<pre>@OutputQuery</pre>
</div>
@code {
private SfQueryBuilder<Order> QueryBuilder;
private string OutputQuery = "";
private string OutputTitle = "";
private void ExportQuery(string format) {
RuleModel rules = QueryBuilder.GetValidRules();
switch(format) {
case "SQL":
OutputTitle = "Inline SQL Query";
OutputQuery = QueryBuilder.GetSqlFromRules(rules);
break;
case "ParameterSQL":
OutputTitle = "Parameterized SQL Query";
ParameterSql paramSql = QueryBuilder.GetParameterSql(rules);
OutputQuery = JsonSerializer.Serialize(paramSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
break;
case "NamedSQL":
OutputTitle = "Named Parameter SQL Query";
NamedParameterSql namedSql = QueryBuilder.GetNamedParameterSql(rules);
OutputQuery = JsonSerializer.Serialize(namedSql, new JsonSerializerOptions {
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
});
break;
case "MongoDB":
OutputTitle = "MongoDB Query";
string mongoQuery = QueryBuilder.GetMongoQuery(rules);
JsonDocument jsonDoc = JsonDocument.Parse(mongoQuery);
OutputQuery = JsonSerializer.Serialize(jsonDoc.RootElement, new JsonSerializerOptions {
WriteIndented = true
});
break;
}
}
public class Order {
public int OrderID { get; set; }
public string CustomerName { get; set; }
public DateTime OrderDate { get; set; }
public decimal Amount { get; set; }
}
}Key Features at a Glance
核心功能一览
| Feature | Use Case | Reference |
|---|---|---|
| Drag-Drop Rules | Reorder conditions interactively | advanced-features.md |
| Clone Groups/Rules | Duplicate complex query structures | advanced-features.md |
| Lock Groups/Rules | Prevent editing of specific conditions | advanced-features.md |
| Nested Groups | Complex multi-condition logic | filtering-and-rules.md |
| Event Tracking | React to query changes | events-and-callbacks.md |
| State Persistence | Save/restore queries | advanced-features.md |
| Localization | Multi-language support | localization-and-accessibility.md |
| Custom Templates | Branded UI | customization-and-styling.md |
| 功能 | 使用场景 | 参考文档 |
|---|---|---|
| Drag-Drop Rules | 交互式重新排序条件 | advanced-features.md |
| Clone Groups/Rules | 复制复杂查询结构 | advanced-features.md |
| Lock Groups/Rules | 防止特定条件被编辑 | advanced-features.md |
| Nested Groups | 复杂多条件逻辑 | filtering-and-rules.md |
| Event Tracking | 响应查询变更 | events-and-callbacks.md |
| State Persistence | 保存/恢复查询 | advanced-features.md |
| Localization | 多语言支持 | localization-and-accessibility.md |
| Custom Templates | 品牌化UI | customization-and-styling.md |
Next Steps
下一步
- Start with references/getting-started.md to set up your environment
- Follow references/basic-setup.md for component configuration
- Explore references/filtering-and-rules.md for core filtering logic
- Handle queries with references/events-and-callbacks.md
- Refer to other guides as needed for advanced scenarios
- 从references/getting-started.md开始搭建您的环境
- 按照references/basic-setup.md进行组件配置
- 探索references/filtering-and-rules.md了解核心过滤逻辑
- 通过references/events-and-callbacks.md处理查询
- 如需高级场景,可参考其他相关指南