获取DataTable中值的索引

时间:2010-08-18 11:33:33

标签: c# asp.net

我需要在DataTable中获取值的索引。

我想要那样。

 SqlDataAdapter da = new SqlDataAdapter("SELECT MessageID,SenderID,MessageContent FROM Messages WHERE ThreadID="+ThreadID, connectionString);
 //Get all messages in the Thread.
 DataTable dt = new DataTable();
 da.Fill(dt);

 da.SelectCommand.CommandText = "SELECT MessageID,SenderID,MessageContent FROM Messages WHERE MessageID="+MessageID;
 //Get the message which i need to get index.
 DataTable dtMsg = new DataTable();
 da.Fill(dtMsg);
 //Get index of dtMsg.Rows[0] in dt.
 int msgIndex = dt.Rows.IndexOf(dtMsg.Rows[0]);

当调试值相同但每次返回-1时,我对它进行了分析。 我能做什么?

1 个答案:

答案 0 :(得分:7)

当行实际上在数据表dtMsg中时,你正在寻找datatable dt中的一行....

尝试:

int msgIndex = dtMsg.Rows.IndexOf(dtMsg.Rows[0]);

实际上,无论如何,总是会返回零,因为无论如何都是按索引引用行。

如果你真正想要的是根据dtMsg行中的值在d​​t中找到一行,你需要使用Find()或Select()之类的东西。

Heres的一些示例代码:

        // Create test data table with messageid as primary column
        DataTable dt = new DataTable();
        dt.Columns.Add("MessageID", typeof (int));
        dt.Columns.Add("SenderID", typeof(int));
        dt.Columns.Add("MessageContent", typeof(string));
        dt.PrimaryKey = new[] {dt.Columns["MessageID"]};

        // Add some data
        dt.Rows.Add(1, 10, "Message1");
        dt.Rows.Add(2, 11, "Message2");
        dt.Rows.Add(3, 12, "Message3");
        dt.Rows.Add(4, 13, "Message4");

        // Create second test data table with single row
        DataTable dtMsg = new DataTable();
        dtMsg.Columns.Add("MessageID", typeof(int));
        dtMsg.Columns.Add("SenderID", typeof(int));
        dtMsg.Columns.Add("MessageContent", typeof(string));
        dtMsg.PrimaryKey = new[] { dtMsg.Columns["MessageID"] };

        dtMsg.Rows.Add(3, 12, "Message3");

        // Not very elegant way of getting the message id from dtMsg. 
        int messageId = (int)dtMsg.Rows[0][0];

        int index = dt.Rows.IndexOf(dt.Rows.Find(messageId));

        // Result : index is 2
        Console.WriteLine(index);

这假设MessageId是表的主索引。