iT邦幫忙

0

DataTables 顯示問題

  • 分享至 

  • xImage

Hi 各位大老,
我又又又來發問了,
前幾次的問題雖然都沒有解決,但我還是試了各種方法處理。
這次是離成功應該算最後一哩路吧!?
我有直接下載datatables.net提供的範例,並且成功做出可編輯的datatable。
但我還是想搬到我的專案內處理,
可是儘管我將程式簡化,搬到我的專案,卻仍然無法顯示資料。
我的Index寫法幾乎是將程式碼照搬到我的程式中,
除了必須要連結的js,
還包含resources/syntax/shCore.js、demo.js、editor-demo.js
並且寫法也是dt_demo.init()以及jquery:function()、vanilla: function()
這樣做專案中可使用的部分有
1.資料庫連線,
2.新增資料的按鈕,可以成功新增資料並回傳資料庫
3.表單樣式的套用

無法使用的只有資料表的顯示,
網頁的Console回傳的訊息是:
Uncaught TypeError: Cannot read properties of undefined (reading 'length')
at jquery.dataTables.min.js:4:33087

如果將上述內容移除,使用 $(document).ready(function () {內容跟網頁範例一樣}
https://editor.datatables.net/examples/inline-editing/tabControl.html
則會顯示:Uncaught TypeError: $(...).DataTable is not a function,
但是新增資料按鈕或是版面樣式套用也會一並失效。

我有按照網頁的介紹做設定處理,但仍有小部分無法一樣。
我不確定是否仍是設定問題,還是跟錯誤訊息一樣是Jquery的問題。
想跟各位大老請教
1.有沒有大老可以提供網路上使用datatables的成功範例(包含編輯...)讓我參考
2.我目前專案使用的是 .NET6.0 的版本,跟原網站的版本有差異。
例如:
1.沒有Startup.cs
2.View的副檔名是cshtml(原網站是html)
3.Program.cs是整體內容差異比較大;
範例中的Main()方法中,
我只能擷取下列程式貼上,其餘設定都是自動產生的內容。
DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);
範例:

public static void Main(string[] args)
        {
            // Register the factory
            // In a "real" project you would only use one of these - but the demo package for
            // Editor supports multiple database types.
            var dbType = Environment.GetEnvironmentVariable("DBTYPE");
            if ( dbType == "sqlserver" ) {
                DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);
            }
            else if ( dbType == "mysql" ) {
                DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient", MySqlClientFactory.Instance);
            }
            else if ( dbType == "postgres" ) {
                DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance);
            }
            else if ( dbType == "sqlite" ) {
                DbProviderFactories.RegisterFactory("Microsoft.Data.Sqlite", SqliteFactory.Instance);
            }

            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

我的專案:

using System.Data.SqlClient;
using System.Data.Common;

DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

最後就是controller,
因為我是要在首頁就顯示資料,所以我是寫在HomeController,
除去驗證的部分,大部分寫法都一樣,
只是在return View上複製範例的代碼,
資料庫也有成功連線。

using Microsoft.AspNetCore.Mvc;
using PO_Management.Models;
using System;
using System.Collections.Generic;
using System.Data.Common;
using DataTables;
using Microsoft.Extensions.Configuration;


namespace PO_Management.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
        [Route("api/sign")]
        [HttpGet]
        [HttpPost]
        public ActionResult Sign()
        {
            var dbType = Environment.GetEnvironmentVariable("DBTYPE");
            var dbConnection = Environment.GetEnvironmentVariable("DBCONNECTION");

            using (var db = new Database(dbType, dbConnection))
            {
                var response = new Editor(db, "Po_sign", "rid")
                   .Model<Po_sign>()
                   .Field(new Field("uid"))
                   .Field(new Field("signname"))
                   .Field(new Field("stage"))
                   .Field(new Field("price"))
                   .Field(new Field("cname"))
                    .TryCatch(true)
                    .Process(Request)
                    .Data();

                return Json(response);
            }
        }
    }
}

但最終就是搞不清楚還有哪裡需要改,
難道真的要去改jquery嘛!?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
厚厚
iT邦新手 1 級 ‧ 2023-09-07 16:37:30

datatable可以編輯的功能不是需要付費嗎?

看更多先前的回應...收起先前的回應...
rain_yu iT邦新手 1 級 ‧ 2023-09-07 16:41:15 檢舉

不用吧!?官網有全範例可以下載耶。
我寫信給官網的時候,他也是叫我下載後跟著官網的介紹研究
https://editor.datatables.net/download/index

厚厚 iT邦新手 1 級 ‧ 2023-09-07 17:02:11 檢舉

Start A Free 15 Day Trial
您有說明是要使用Editor功能嗎?

rain_yu iT邦新手 1 級 ‧ 2023-09-07 17:09:29 檢舉

算有吧!?
我信件是直接問editing的問題
他回覆就是下載範例並且跟著指示做。
不過經過你這樣說,確實有找到可以付費購買的地方。
但如果問題可以解決,我不介意購買自己使用
上面有介紹到如果購買後許可證是永久的

厚厚 iT邦新手 1 級 ‧ 2023-09-07 17:15:12 檢舉

您提供的連結最底下有"purchase"的頁面

datatables之前用過 但只要是new Editor就會失敗
查詢其他網站也不乏"破解"字樣,所以應該是需要付費解鎖的
後續是利用自製的BUTTON去達成修改功能

厚厚 iT邦新手 1 級 ‧ 2023-09-07 17:19:12 檢舉

可能您之前成功時剛好15天試用內有成功
但搬進專案後剛好超過試用期限

如果您付費購買後的確能解決,也請您通知我,感謝~
另外我看到都是年費,而非買斷,有說明買斷的頁面嗎?

rain_yu iT邦新手 1 級 ‧ 2023-09-07 18:13:54 檢舉

跟你聊後,我好像想通了,自己的專案根本沒有許可證,所以無法顯示應該是正常的。

他有個問答頁面,有一個是關於一次付款的,
上面有寫說許可證是永久的,只是後續更新的內容不會給你用

我要發表回答

立即登入回答