【问题标题】:How to format DataGridView to password characters?如何将 DataGridView 格式化为密码字符?
【发布时间】:2020-02-21 11:13:50
【问题描述】:

目标:

我的目标是将 1 列格式化为密码字符 *

我尝试过的资源:

我在这里使用了一个例子:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.cellformatting?view=netframework-4.8

并在这里尝试了这个答案:

https://stackoverflow.com/a/38074239/12485722

这是我当前加载 DataGrid 视图的代码:

private void Form3_Load(object sender, EventArgs e)
{
    RefreshGrid();
}



//Refresh Data Grid from external Forms
public void RefreshGrid()
{
    // MySQL connection string
    using (var conn = new MySqlConnection(ConnectionString()))
    {
        using (var mySqlDataAdapter = new MySqlDataAdapter("select * from user", conn))
        {
            using (var dataSet = new DataSet())
            {
                DataSet DS = new DataSet();
                mySqlDataAdapter.Fill(DS);
                dataGridView1.DataSource = DS.Tables[0];
            }
        }
    }
}

这只是使用用户名和密码加载 DataGridView。

现在我需要将第二列格式化为密码字符,因此密码不会显示为文本,而是格式化为*

我已经尝试从上面提到的第二个资源中添加这段代码:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 1 && e.Value != null)
    {
        e.Value = new String('*', e.Value.ToString().Length);
    }
}

这不起作用 - 没有显示错误,但我注意到此引用设置为 0。

(注意:应该是这样的)

问题:

我很困惑哪里出了问题..有人可以帮助我完成这项任务吗?

更新 (1) - 未显示事件和单元格格式:

【问题讨论】:

  • 您必须处理 EditingControlShowing 事件,在此事件中将 e.Control 项的属性“UseSystemPasswordChar”(例如,您可以将其转换为 TextBox)设置为“true”。
  • 关于缺乏参考:您是否添加了事件方法以在正确的事件名称中启动 gridview?在设计器中检查它,可能它没有连接到属性>事件>CellFormatting,你应该有值 dataGridView1_CellFormatting:。它应该保存在 Designer.cs 文件中,这是您的 Form 的部分类。
  • @BartoszOlchowik 属性中没有事件,单元格格式也是如此。我也注意到了这一点。我有点困惑为什么它没有出现
  • 事件和方法之间的连接保存在表单的designer.cs文件中,它是表单的部分类。一切都应该保存在这两个文件中,但是您不应该手动修改designer.cs文件,设计师已经为您完成了。
  • 点击黄色照明螺栓显示事件

标签: c#


【解决方案1】:

您的方法没有连接到 GridView 的事件(这就是它有 0 个引用的原因,因为没有使用您的函数)。

上述链接中的解决方案是正确的,但您应该将您的方法连接到设计器中的事件(右键单击网格视图 > 属性 > 事件)并选择要在 CellFormatting 事件中触发的事件。也不要忘记处理 EditingControlShowing,但是您需要的所有内容都已经写在您提到的解决方案线程中。

【讨论】:

  • 当你点击黄色闪电时,你会看到那里的事件......
  • 知道了,从来不知道。谢谢
  • 很高兴能帮到你。
【解决方案2】:

您为什么不修改您的查询,只说以下内容:

select username, repeat('*', length(password)) from users

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2015-02-28
    相关资源
    最近更新 更多