Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将带有DateTime列的GridView.DataSource转换为datatable_C#_Asp.net_Entity Framework_Gridview - Fatal编程技术网

C# 将带有DateTime列的GridView.DataSource转换为datatable

C# 将带有DateTime列的GridView.DataSource转换为datatable,c#,asp.net,entity-framework,gridview,C#,Asp.net,Entity Framework,Gridview,我最终尝试对gridview进行排序,但当我转换时: DataTable dt = (DataTable)gridAllTests.DataSource; 存在一个exeption-无法将对象DateTime转换为字符串 数据源来自数据库sql server,使用实体 GridView: <asp:GridView ID="gridAllTests" runat="server" AutoGenerateColumns="false" DataKeyNames="testId" All

我最终尝试对gridview进行排序,但当我转换时:

DataTable dt = (DataTable)gridAllTests.DataSource;
存在一个exeption-无法将对象DateTime转换为字符串

数据源来自数据库sql server,使用实体 GridView:

<asp:GridView ID="gridAllTests" runat="server" AutoGenerateColumns="false" 
DataKeyNames="testId" AllowSorting="true">

 <Columns>    
    <asp:BoundField DataField="courseName" HeaderText="Course" SortExpression="courseName"/>
    <asp:BoundField DataField="onDate" HeaderText="Date" SortExpression="onDate" 
        DataFormatString="{0:d}" HtmlEncode="false"/>
    <asp:BoundField DataField="lastRegisterDate" HeaderText="LastDate" 
        SortExpression="lastRegisterDate" DataFormatString="{0:d}" HtmlEncode="false"/>   
    <asp:TemplateField>
        <ItemTemplate>
        <asp:LinkButton ID="btnRegister" runat="server" text="Register" 
            CommandName="Register" CommandArgument='<%#Eval("testId") %>' />
            <asp:Literal ID="litAlreadyRegisterd" runat="server" Text="Registered"/>
            <asp:Literal ID="litTooLate" runat="server" Text="Registration Over"/>
        </ItemTemplate>
        </asp:TemplateField>
    </Columns>

SecondTestEntities1 db = new SecondTestEntities1();
    protected void Page_Load(object sender, EventArgs e)
    {      
        if (!Page.IsPostBack)
        {
            User currUser = (User)Session["user"];
            gridAllTests.DataSource = from test in db.Tests
                                     select new
                                     {
                                         testId= test.TestId,
                                         courseName = test.Course.Name,
                                         onDate = test.OnDate,
                                         lastRegisterDate = test.LastRegisterDate
                                     };
            try
            {
                gridAllTests.DataBind();
                DataTable dt = (DataTable)gridAllTests.DataSource;
                Session["taskTable"] = dt;
            }
            catch (Exception err)
            {
                lblError.Text = err.Message.ToString();
            }
        }

        if (gridAllTests.Rows.Count < 1)
        {
            lblMessage.Visible = true;
        }       
    }

SecondTestEntities1 db=新的SecondTestEntities1();
受保护的无效页面加载(对象发送方、事件参数e)
{      
如果(!Page.IsPostBack)
{
用户currUser=(用户)会话[“用户”];
gridAllTests.DataSource=来自db.Tests中的测试
选择新的
{
testId=test.testId,
courseName=test.Course.Name,
onDate=测试。onDate,
lastRegisterDate=test.lastRegisterDate
};
尝试
{
gridAllTests.DataBind();
DataTable dt=(DataTable)gridAllTests.DataSource;
会话[“任务表”]=dt;
}
捕获(异常错误)
{
lblError.Text=err.Message.ToString();
}
}
if(gridAllTests.Rows.Count<1)
{
lblMessage.Visible=true;
}       
}
试试这种方法

          DataView dv=(DataView) from test in db.Tests
                                     select new
                                     {
                                         testId= test.TestId,
                                         courseName = test.Course.Name,
                                         onDate = test.OnDate,
                                         lastRegisterDate = test.LastRegisterDate
                                     };
         gridAllTests.DataSource = dv;

        DataTable dt = new DataTable();      

        DataSourceSelectArguments args = new DataSourceSelectArguments();

        DataView dv = new DataView();
        dv = (DataView)dv.Select(args);// This SqlDataSourceObject means your sql query return object ,like dataset or dataview, etc

        dt = dv.ToTable();

尝试将日期对象转换为字符串

test.OnDate.ToString(//format here);

test.LastRegisterDate.ToString(//format here);
我想我遇到了一个类似的问题,DataTable不知道如何处理DateTime对象。

if(!Page.IsPostBack)
if (!Page.IsPostBack)
        {
            User currUser = (User)Session["user"];
           //  Dataset dsGrdDource = new Dataset();
            IEnumerable<DataRow> result = from test in db.Tests
                                  select new
                               {
                                  testId= test.TestId,
                                  courseName = test.Course.Name,
                                  onDate = test.OnDate.ToShortDateString() ,
                                  lastRegisterDate = test.LastRegisterDate
                               };

          DataTable dtgrdSource= query.CopyToDataTable<DataRow>();
       try
         { 

                 gridAllTests.DataSource =dtgrdSource;
                 gridAllTests.DataBind();
               //  DataTable dt = (DataTable)dsGrdDource.Tables[0];
                Session["taskTable"] = dtgrdSource;
            } 

            catch (Exception err)
            {
                lblError.Text = err.Message.ToString();
            }
        }
{ 用户currUser=(用户)会话[“用户”]; //数据集dsGrdDource=新数据集(); IEnumerable结果=以db.Tests为单位的测试结果 选择新的 { testId=test.testId, courseName=test.Course.Name, onDate=test.onDate.ToShortDateString(), lastRegisterDate=test.lastRegisterDate }; DataTable dtgrdSource=query.CopyToDataTable(); 尝试 { gridAllTests.DataSource=dtgrdSource; gridAllTests.DataBind(); //DataTable dt=(DataTable)dsGrdDource.Tables[0]; 会话[“任务表”]=dtgrdSource; } 捕获(异常错误) { lblError.Text=err.Message.ToString(); } }
如果使用的是
ToSortDateString()
请不要在
boundfield
中应用格式,因为日期时间格式无法应用于字符串。
如果您不想使用
ToSortDateString()
只需在不使用
ToSortDateString()
的情况下尝试上述代码,并在BoundField中使用格式设置。

请输入更多代码。像gridAllTests.DataSource=???什么?
DataTable dt=(DataTable)gridAllTests.DataSource
您的
数据源是什么?
?您确定它的数据表吗???我应该在哪里添加它?同样的问题,不能将dv用于该查询tried that and got:数据源和数据源ID都是在“gridAllTests”上定义的。移除一个definition@Nuni我希望这是您的完整aspx代码,并且您在设计页面中没有使用任何
数据源ID
。我已经更新了答案检查,看它是否有效。但是我不明白为什么您的代码试图将DateTime转换为字符串。我在设计页面中没有使用数据源ID。是否有其他方法仅显示日期,而不使用将日期时间转换为字符串?无论如何,我得到了这个错误:错误1不能隐式地将类型“System.Linq.IQueryable”转换为“System.Collections.Generic.IEnumerable”。存在显式转换(是否缺少转换?)是,因为当您在查询中使用
New
关键字时,它正在创建匿名类型的这些对象(抱歉),而不是“IEnumerable result”,请尝试使用
Var
关键字作为
Var result=