已回答 在DataGridView中显示的查询输出问题

PDS8475

活跃的成员
已加入
2019年6月25日
留言内容
41
编程经验
Beginner
你好
我的以下查询有问题
"Select * FROM ItemsForSale INNER JOIN Engineering ON Engineering.Serial = ItemsForSale.Serial WHERE Engineering.Name = @s"
我正在使用它来过滤结果,并且它在DataGridView中获取正确的结果,但是前4列被命名为"TableName.ColumnName"其余的只是"ColumnName"
如何停止显示表名的前四列。

表单上还有另外3个DataGridView,它们使用相同的代码,但查询不同,它们都可以正常工作。我什至从中复制了代码和用于过滤工作dataGridView的代码,除了查询之外,它们是相同的。

我正在使用的代码如下

C#:
 string iConString = System.IO.File.ReadAllText("FixIT.con");
                iConString = iConString.Replace(System.Environment.NewLine, string.Empty);
               
                System.Data.OleDb.OleDbConnection iconnn = new System.Data.OleDb.OleDbConnection();
                string iconnsString = "Provider = Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + iConString;
                try
                {

                    using (OleDbConnection iconnection = new OleDbConnection(iconnsString))
                    {

                     
                        using (OleDbCommand icommand = new OleDbCommand("Select * FROM ItemsForSale INNER JOIN Engineering ON Engineering.Serial = ItemsForSale.Serial WHERE Engineering.Name = @s", iconnection))
                        {

                            icommand.CommandType = CommandType.Text;
                            icommand.Parameters.AddWithValue(@s, Details1_textBox.Text);
                            using (OleDbDataAdapter iDA = new OleDbDataAdapter(icommand))
                            {

                                using (DataTable iDT = new DataTable())
                                {
                                    ItemsForSale_dataGridView.Columns[4].Name = "Serial";
                                    iDA.Fill(iDT);
                                    ItemsForSale_dataGridView.DataSource = iDT;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    TextWriter tw = new StreamWriter("ex.txt");
                    tw.WriteLine(ex);
                    tw.Close();
                }
 
Last edited:

PDS8475

活跃的成员
已加入
2019年6月25日
留言内容
41
编程经验
Beginner
以防万一我的问题不清楚,这是两个屏幕截图,第一个未过滤,第二个按名称过滤。
UnFiltered.jpg


Filtered.jpg
 

PDS8475

活跃的成员
已加入
2019年6月25日
留言内容
41
编程经验
Beginner
数据绑定后循环遍历DataGridView的列,并更改每个列的HeaderText。

谢谢你,但是我一定做错了。
C#:
{

                      
                        using (OleDbCommand icommand = new OleDbCommand("Select * FROM ItemsForSale INNER JOIN Engineering ON Engineering.Serial = ItemsForSale.Serial WHERE Engineering.Name = @s", iconnection))
                        {

                            icommand.CommandType = CommandType.Text;
                            icommand.Parameters.AddWithValue(@s, Details1_textBox.Text);
                            using (OleDbDataAdapter iDA = new OleDbDataAdapter(icommand))
                            {

                                using (DataTable iDT = new DataTable())
                                {
                                    
                                        
                                        iDA.Fill(iDT);
                                    
                                    for (int i = 0; i < ItemsForSale_dataGridView.Columns.Count; i++)
                                    {
                                        ItemsForSale_dataGridView.Columns["ItemsForSale.Type"].Name = "Type";
                                        ItemsForSale_dataGridView.Columns[2].Name = "Make";
                                        ItemsForSale_dataGridView.Columns[3].Name = "Model";
                                        ItemsForSale_dataGridView.Columns[4].Name = "Serial";
                                        ItemsForSale_dataGridView.DataSource = iDT;
                                    }
                                }
                            }
                        }
                    }

如果按编号调用该列并将其重命名,则什么也不会发生;如果按名称调用该列,则会得到一个Null Reference Exception。
if I have the line ItemsForSale_dataGridView.DataSource = iDT; before the loop nothing happens, also nothing happens with it after the loop.
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
设置数据源后,我只需要进行正则表达式替换即可:
C#:
ItemsForSale_dataGridView.DataSource = iDT;

foreach (DataGridViewColumn col in ItemsForSale_dataGridView.Columns) {
    col.HeaderText = Regex.Replace(col.HeaderText, @"^.*?\.", string.Empty);
}
 

PDS8475

活跃的成员
已加入
2019年6月25日
留言内容
41
编程经验
Beginner
设置数据源后,我只需要进行正则表达式替换即可:
C#:
ItemsForSale_dataGridView.DataSource = iDT;

foreach (DataGridViewColumn col in ItemsForSale_dataGridView.Columns) {
    col.HeaderText = Regex.Replace(col.HeaderText, @"^.*\.", string.Empty);
}
谢谢
那很好
 
最佳 底部