| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using System;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media;
- using TeamAAS.Database.Services;
- namespace TeamAAS.Database.UI
- {
- /// <summary>
- /// 默认数据库「配置/调试页」(对齐 Camera 的 DefaultCameraDebugPage):绑定「当前产品」的 ProductDatabase,
- /// 展示连接信息、可编辑数据库文件/服务器、初始化建表、测试连接、浏览表与行数。
- /// 未在 [DatabaseProvider] 上指定 ConfigPageType 的提供者都用本页;提供者专属字段由其自己的页扩展。
- /// 操作类通知复用主程序 DialogHelper;页面不本地合并 HC 皮肤,颜色走 DynamicResource 跟随主题。
- /// </summary>
- public partial class DefaultDatabaseConfigPage : UserControl, IDatabaseConfigPage
- {
- private static readonly Brush ConnectedBrush = Freeze(0x4C, 0xAF, 0x50); // 绿=已连接
- private static readonly Brush IdleBrush = Freeze(0x9E, 0x9E, 0x9E); // 灰=未连接
- private ProductDatabase _db;
- public DefaultDatabaseConfigPage()
- {
- InitializeComponent();
- }
- /// <summary>当前绑定的产品数据库实例。</summary>
- public ProductDatabase Database => _db;
- public void BindDatabase(ProductDatabase database)
- {
- _db = database;
- bool has = _db != null;
- BtnInit.IsEnabled = has;
- BtnTest.IsEnabled = has;
- BtnSave.IsEnabled = has;
- RefreshHeader();
- RefreshTables();
- }
- public void UnbindDatabase()
- {
- _db = null;
- TxtProduct.Text = "-";
- TxtProvider.Text = "-";
- TxtServer.Text = "";
- TxtStatus.Text = "未绑定";
- StatusDot.Background = IdleBrush;
- TableList.Items.Clear();
- }
- private void RefreshHeader()
- {
- if (_db == null) { UnbindDatabase(); return; }
- TxtProduct.Text = string.IsNullOrEmpty(_db.ProductName) ? "-" : _db.ProductName;
- TxtProvider.Text = (_db.Config?.ProviderType ?? "sqlite").ToUpperInvariant();
- TxtServer.Text = _db.Config?.Server ?? "";
- bool connected = _db.IsConnected;
- TxtStatus.Text = connected ? "已连接" : "未连接";
- StatusDot.Background = connected ? ConnectedBrush : IdleBrush;
- }
- private void RefreshTables()
- {
- TableList.Items.Clear();
- if (_db?.Database == null) return;
- if (!_db.IsConnected)
- {
- TableList.Items.Add("(未连接 — 点「初始化/建表」或「测试连接」)");
- return;
- }
- try
- {
- foreach (var name in _db.Database.GetTableNames())
- {
- long count = -1;
- try
- {
- var scalar = _db.Database.ExecuteScalar($"SELECT COUNT(*) FROM [{name}]");
- if (scalar != null && scalar != DBNull.Value)
- count = Convert.ToInt64(scalar);
- }
- catch { /* 单表计数失败不影响列表 */ }
- TableList.Items.Add(count >= 0 ? $"{name} ({count} 行)" : name);
- }
- }
- catch (Exception ex)
- {
- TableList.Items.Add($"读取表失败:{ex.Message}");
- }
- }
- private void BtnInit_Click(object sender, RoutedEventArgs e)
- {
- if (_db == null) { DialogHelper.ShowWarning("未绑定产品数据库"); return; }
- var r = _db.Initialize();
- RefreshHeader();
- RefreshTables();
- if (r.Success) DialogHelper.Success(r.Message);
- else DialogHelper.ShowError(r.Message);
- }
- private void BtnTest_Click(object sender, RoutedEventArgs e)
- {
- if (_db?.Database == null) { DialogHelper.ShowWarning("未绑定产品数据库"); return; }
- var r = _db.Database.TestConnection();
- RefreshHeader();
- if (r.Success) DialogHelper.Success(r.Message);
- else DialogHelper.ShowError(r.Message);
- }
- private void BtnRefresh_Click(object sender, RoutedEventArgs e)
- {
- RefreshHeader();
- RefreshTables();
- }
- private void BtnSave_Click(object sender, RoutedEventArgs e)
- {
- if (_db?.Config == null) { DialogHelper.ShowWarning("未绑定产品数据库"); return; }
- _db.Config.Server = TxtServer.Text?.Trim();
- if (ProductDatabaseManager.SaveConfig(_db.ProductName, _db.Config))
- {
- // 重建实例让新配置立即生效,并重新绑定本页
- BindDatabase(ProductDatabaseManager.Recreate(_db.ProductName));
- DialogHelper.Success("配置已保存并生效");
- }
- else
- {
- DialogHelper.ShowError("配置保存失败(详见日志)");
- }
- }
- private static Brush Freeze(byte r, byte g, byte b)
- {
- var brush = new SolidColorBrush(Color.FromRgb(r, g, b));
- brush.Freeze();
- return brush;
- }
- }
- }
|